所有枚举类型都有一个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());
}
}
打印:
1
Process 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);
//使用字段代替ordinal
private 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());
}
}
打印:
2
Process finished with exit code 0
Enum文档中对ordinal方法有说明,大多数程序员用不到这个方法,它是设计用于基于枚举的通用数据结构的,如enumset和enumMap,最好还是避免使用ordinal方法。
所有文章无条件开放,顺手点个赞不为过吧!