先说 Java 枚举的不便之处
定义一个枚举,直接用中文。
enum Session { 春天, 夏天, 秋天, 冬天 }
看看应用:
System.out.println(Session.夏天); // 夏天 System.out.println(Session.夏天.ordinal()); // 1 System.out.println(Session.夏天.name()); // 夏天
夏天位于第 2 个,所以 oridinal 为 1。
再看看循环枚举项:
Session[] sessions = Session.values(); for (var s : sessions) { System.out.println(s.name() + " = " + s.ordinal()); }
循环倒也方便,直接 values() 得数组,然后配合 name()、ordinal() 使用。
不便之处
1、不能直接“春天 = 10”来改变枚举项的值,还好可以通过其他方式实现,但是代码写得有点长。
2、无法将 int 转换成对应的枚举值,比如在其他语言中 (Session)0,在本例中得到的就是:Session.春天,然而 Java 不行。
Java 枚举的强大之处
Java 枚举,居然可以像类一样定义字段、构造方法(private 的)。
enum Session { 春天(10, "Spring"), 夏天(20, "Summer"), 秋天(30, "Autumn"), 冬天(40, "Winter"); private int value; private String name; private Session(int value, String name) { this.value = value; this.name = name; } public int getValue() { return value; } public String getName() { return name; } }
应用:
Session[] sessions = Session.values(); for (var s : sessions) { System.out.println(s.name() + " " + s.ordinal() + " " + s.getValue() + " " + s.getName()); }
效果:
春天 0 10 Spring
夏天 1 20 Summer
秋天 2 30 Autumn
冬天 3 40 Winter