Java中实现C++中的enum

以下是我开通的JAVA论坛,欢迎光临^_^
http://groups.google.com/group/roofalison/browse_thread/thread/ecd6ca274fdcab8e

感谢Nubix提醒我,原来Java已经有enum了,可能我手头的书和编译器是基于1.4的,没有看到,呵呵,不过下面的东西看看无妨。
C++里的enum有两个特性:
1、静态、常量特性。
2、类型检查。
对于第一个,即是一旦定义了enum,内部数据将不可被修改,且也定义了存储空间,这在Java里当然是很容易实现的。
现在以“星期”类型为例:
对C++而言,可以这么定义:
enum Week {
  MON = 1,
  WED = 2,
  TUE = 3,
  THU = 4,
  FRI = 5,
  SAT = 6,
  SUN = 7
};
如果在Java中只实现enum第一个特性,那么可以用接口实现:
public interface Week {
    int MON = 1,
        WED = 2,
        TUE = 3,
        THU = 4,
        FRI = 5,
        SAT = 6,
        SUN = 7;
}
由于接口使得内部数据默认强制为public static final类型,所以第一个特性可以轻易实现,但它不能实现第二个特性 --- 对于enum来说,赋值操作只能针对同一个类型,但对于Java的接口实现,由于内部成员类型为int,那么毫无疑问我们可以写int s = Week.MON + Week.WED; 这样的操作,这不是合理的权限,所以我们必须对此做出限制。
以下做法更好的实现了类型检查,防止了Week类型有不必要的权限,以此获得实现C++中enum的效果:
// 使Week为final类型,这样它就不可继承
public final class Week {
    public static void main(String[] args) {
        Week day = Week.MON;
        day = Week.FRI;
    }
   
    public String toString() {
        return _name;
    }
    //
    public final static Week MON = new Week("Monday");
    public final static Week TUE = new Week("Tuesday");
    public final static Week WED = new Week("Wednesday");
    public final static Week THU = new Week("Thusday");
    public final static Week FRI = new Week("Friday");
    public final static Week SAT = new Week("Saturday");
    public final static Week SUN = new Week("Sunday");
    // 将构造方法修饰为private,这样用户不能任意new自己想要的Week,所以Week的成员限定为以上有限的七个
    private Week(String aName) {
        _name = aName;
    }
    private String _name;
}
参考自:《thinking in java》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值