用类来代替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”);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值