第三十五条:使用实例字段代替序号
所有枚举类型都有一个ordinal()方法,他返回枚举常量在这个类型中以数字表示的位置信息,也就是序号。
举例:
public enum Ensemble {SOLO,DUET,TRIO,QUARTET,QUINTET,SEXTET,SEPTET,OCTET,NONET,DECTET;public int numberOfMusicians() {return ordinal()+1;}public static void main(String[] args) {System.out.println(Ensemble.SOLO.numberOfMusicians());}
}
打印:
1Process finished with exit code 0
缺点:如果有人改了顺序,那么就残了,全部都变了,不容易维护。于是:
如果需要记录顺序最好使用字段记录(永远不要使用ordinal),避免位置发生改变时ordinal值变动影响业务
举例:
public enum Ensemble {SOLO(1),DUET(2),TRIO(3),QUARTET(4),QUINTET(5),SEXTET(6),SEPTET(7),OCTET(8),NONET(9),DECTET(10);//使用字段代替ordinalprivate final int numberOfMusicians;Ensemble(int size) {this.numberOfMusicians = size;}public int getNumberOfMusicians() {return numberOfMusicians;}public static void main(String[] args) {System.out.println(Ensemble.DUET.getNumberOfMusicians());}
}
打印:
2Process finished with exit code 0
Enum文档中对ordinal方法有说明,大多数程序员用不到这个方法,它是设计用于基于枚举的通用数据结构的,如enumset和enumMap,最好还是避免使用ordinal方法。
所有文章无条件开放,顺手点个赞不为过吧!