Effective Java 学习笔记——第六章(未完待续)
来源:互联网 发布:php文件上传目录 编辑:程序博客网 时间:2024/06/15 19:07
第30条 用enum代替int常量
1. enum与int枚举对比
古老的int枚举:
public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 0; public static final int APPLE_GRANNY_SMITH = 0; public static final int ORANGE_FUJI = 0; public static final int ORANGE_PIPPIN = 0; public static final int ORANGE_GRANNY_SMITH = 0;
enum枚举:
public enum Apple{FUJI,PIPPIN,GRANNY_SMITH};public enum Orange{FUJI,PIPPIN,GRANNY_SMITH};
enum枚举较之于int枚举的优势:
- 语义化,简洁
- 类型安全(当需要传入Apple类型时,enum可以在编译时期检查是否传的正确,而int枚举不可以)
- enum可以有自己的方法与构造器(构造器私有),更加灵活,功能更强大
2. enum枚举的特点
- 每个枚举常量相当于有static final修饰;
- 枚举类的构造器为private,外界无法创建其实例(但可以调用其内部唯一常量,作为单例模式);
- 编译时期类型安全
3. enum枚举实例
public enum EnumTest { RED("red", 1), GREEN("green", 2), BLUE("blue", 3); private String name; private int num; EnumTest(String name, int num) { this.name = name; this.num = num; } public String getName() { return name; } public int getNum() { return num; }}
4. 特定于常量的方法实现(即对方法枚举)
public enum Operation{ PLUS{double apply(double x,double y) {return x+y;}}, MINUS{double apply(double x,double y) {return x-y;}}; abstract double apply(double x,double y);}实质是对方法的枚举,使用时为Operation.PLUS.apply(x,y)。注意enum的前缀仍为static final。每个枚举常量都要继承apply抽象方法。
第31条 用实例域代替序数
每个枚举常量在枚举表中的位置可用ordinal()函数获取。但不建议使用该方法,因为一旦枚举常量在枚举表中的位置改变,ordinal()获取的位置也会发生改变(除非你是真的只想获取它的位置)。
建议使用如
public enum Test{ A(1),B(2); private int location; Test(int location){ this.location=location; } public int getLocation(){ return location; }}
便于以后的修改与扩展。
阅读全文
1 0
- Effective Java 学习笔记——第六章(未完待续)
- Effective Java 学习笔记——第四章(未完待续)
- Effective Java 学习笔记——第七章(未完待续)
- 《深入理解Linux内核》学习笔记——第二章(未完待续)
- 尚学堂java SE学习笔记(未完待续)
- Ajax学习笔记总结(未完待续)
- struts2 学习笔记(未完待续)
- Oracle学习笔记(未完待续)
- dreamweaver学习笔记(未完待续)
- css学习笔记(未完待续)
- angular2学习笔记(未完待续)
- 进程学习笔记(未完待续)
- sql注入学习笔记(未完待续)
- javascript学习笔记(未完待续)
- Shell学习笔记...未完待续...
- jQuery 学习笔记(未完待续)
- 51学习笔记<未完待续>
- java并发学习(未完待续)
- jzoj1277 最高的奶牛
- php 把$_POST参数解析出来
- AVL树的旋转图解和简单实现
- 第四章 类和对象
- Struts2的设计模式,请求流程
- Effective Java 学习笔记——第六章(未完待续)
- html中引入调用另一个html的方法
- DOM节点的创建、插入、删除、查找、替换
- C#中实现label文字循环滚动
- Android N TelephonyProvider及数据库初始化
- AICamera of Caffe2
- vue基础语法
- PHP调试-----打印信息
- 为什么-8补码是1000(关于补码的说明)