枚举
enum可以采用int等方式来实现枚举,但是在某些情况下,只要他人提供一个同该枚举一样的值的话会造成程序错误的以为是符合条件的enum变量,缺乏安全行;
java安全枚举类
public class Suit{
private String name;
private Suit(String name){
this.name = name;
}
public static final Suit ENUM1 = new Suit("enum1");
public static final Suit ENUM2 = new Suit("enum2");
}
因为在该类中,并未提供可以访问的构造函数(构造函数是private),所以可以避免2个Suit的值相同的情况。
另外一种是扩展的问题,比如要对该类增加新的类型。
则可以把构造函数弄成protected的方法让子类扩展,并将equals和hashcode方法设置成final,不让子类改写了。
安全枚举类有个缺陷:很难对所有的枚举值进行罗列,即使采用collections来存储也是比较没有效率的,还有就是不能用在switch case中