Java的枚举相对于旧的“Typesafe Enum”模式的优势?
2022-09-01 10:50:40
在 JDK1.5 之前的 Java 中,“Typesafe Enum”模式是实现只能采用有限数量值的类型的典型方法:
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;
}
}
(例如,参见布洛赫的《有效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;
}
}
显然,语法更好,更简洁(无需显式定义值的字段,提供合适的),但到目前为止看起来非常像Typesafe枚举模式。toString()
enum
我所知道的其他差异:
- 枚举自动提供方法
values()
- 枚举可以在 中使用(编译器甚至检查您不会忘记值)
switch()
但这一切看起来都只不过是句法糖,甚至有一些限制(例如 始终继承自 ,并且不能被子类化)。enum
java.lang.Enum
是否还有其他更基本的好处,这些好处是Typesafe枚举模式无法实现的?enum