1.enum用实例域代替序数
1.1 首先需要讲下这里的序数是什么?
所有的枚举都一个ordinal方法,返回每个枚举常量在类型中的数字位置,例子如下:
enum SardineEnum {
A("沙",0),
B("丁",1),
C("鱼",2),
D("flat",3);
public int ReturnEnumPos(){
return ordinal()+1;
}
}
public static void main(String[] args) {
SardineEnum type=SardineEnum.A;
System.out.println("enum对象所在的常量在类型中的数字位置:"+type.ReturnEnumPos());
}
结果:
1.2 序数的缺点
这个ordinal方法缺点很多,所以书中是直接不推荐使用,只是了解即可
缺点:当常量进行重新排序(A\B\C\D打乱),ReturnEnumPos也对于常量返回的序号就不一样了,很不稳定
比如:BACD,那么上面返回的数字位置就变成2了。
1.3 用实例域代替序数
实例域是什么?
enum SardineEnum {
A("沙",0),
B("丁",1),
C("鱼",2),
D("flat",3);
private String name;
private int index;
SardineEnum(String theEnum, int index) {
this.name=theEnum;
this.index=index;
}
}
在A()中添加参数,构造器实例化变量index,就是实例域的一种表现形式
根据这个就无需要序数ordinal方法,而是直接通过A(0)的index参数来获取序号