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》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章