以下是我开通的JAVA论坛,欢迎光临^_^ http://groups.gaoogle.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) | 引用通告 | 编辑
|