用类来代替enum结构

内容来源: Effective Java
用类来代替enum结构
使用类型安全枚举类
public class Suit{
private final String name;
private Suit(String name){
this.name = name;
}
public String toString(){return 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”);
}
因为客户没有办法创建这个类的对象,也无法扩展这个类(即使这个类没有被声明为final,子类的构造函数必须调用超类的构造函数,但是这个类中的构造函数是private的)。所以除了通过这些共有的静态final域导出的Suit对象之外,永远不会再有其他的对象存在。
类型安全枚举模式提供了编译时的类型安全性。如果你声明了一个方法,它的一个参数为Suit类型,则可以保证,任何传入的非null的对象引用一定表示了这四种纸牌花色之一。
如果想根据花色进行排序,只需要实现Comparable()接口。静态变量nextOrdinal被用作序数,Suit创建对象的顺序决定了oridinal的大小。
// Oridinal-based typesafe enums
public class Suit implements Comparable{
private final String name;
private static int nextOrdinal = 0;
private final int oridinal = nextOrdinal++;
private Suit(String name){
this.name = name;
}
public int compareTo(Object o){
return ordinal– ((Suit)o).ordinal;
}
public String toString(){return 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”);
}

你可能感兴趣的:(java)