在 JDK1.5 之前的 Java 版本中,"类型安全枚举"模式是实现只能取有限数量值的类型的常见方式:
public class Suit {
private final String name;
public static final Suit CLUBS =new Suit("clubs");
public static final Suit DIAMONDS =new Suit("diamonds");
public static final Suit HEARTS =new Suit("hearts");
public static final Suit SPADES =new Suit("spades");
private Suit(String name){
this.name =name;
}
public String toString(){
return name;
}
}
(例如参考 Bloch 的 Effective Java 第21条)。
现在在JDK1.5+中,“官方”的方式显然是使用enum
:
public enum Suit {
CLUBS("clubs"), DIAMONDS("diamonds"), HEARTS("hearts"), SPADES("spades");
private final String name;
private Suit(String name) {
this.name = name;
}
}
显然,语法更为简洁和优美(不需要为值明确定义字段,提供了合适的 toString()
),但到目前为止,enum
看起来与 Typesafe Enum 模式非常相似。
我所知道的其他区别包括:
enum
自动提供一个values()
方法enum
可以在switch()
中使用(编译器甚至检查您是否遗漏了某个值)
但这些看起来只是一些语法糖,并且还有一些限制(例如 enum
总是继承自 java.lang.Enum
,不能被子类化)。
除了 Typesafe Enum 模式无法实现的其他更深层次的好处吗?