主题:【原创】Java 1.5新特点的一些体验 -- 老兵帅客
在Java 1.5中,我们终于看到了enum这个在其它语言中常见的东西。
虽然Java 1.5中enum的使用很简单,但是我不明白为什么Sun非要把enum构造成从java.lang.Enum类中衍生出来的一个子类,因为enum思想本身是很简单的,它不过是一个整数序列的助记符形式。用类自然可以很简单地实现enum功能,但是代价在于类的成本,不管类的构建成本有多低,它都肯定高于简单数据类型。也许问题的关键在于Java不存在可以脱离Class单独存在的数据部件,但是名义上的附属、实际上的简单实现我想应该不是件很困难的事情,也就是修改一下编译器,以实现那个整数序列罢了,实在是没有必要单独构造出一个完整的类java.lang.Enum来。书里的解释是可以增加可检查度以增强编译时间的检查能力,但是C++的enum实现应该也是可以做到编译时间的检查能力的。换句话来说就是优雅的成本。
下面是它的一些例子(但是我有所修改):
package test2005_2;
public class Student {
private String firstName;
private String lastName;
private Grade grade;
enum Grade {
A, B, C, D, F, INCOMPLETE} ;
public Student(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public String getFullName() {
return new StringBuffer(firstName)
.append(" ")
.append(lastName)
.toString();
}
public void assignGrade(Grade grade) {
this.grade = grade;
}
public Grade getGrade() {
return grade;
}
}
在enum的当前实现中,Sun允许其拥有方法,一个很有趣的想法,但是有必要吗?也许根本原因是由于它本质上是一个类,自然什么都可以往里面加,但是请不要忘记,事情的本质是什么?另外,enum的定义中可以使用Template,一个可以把人搞疯的东西。
总之,我们看到了一个无比强大的enum,它实际上具有了类的一切能力,当然限制在public,static,和final的范围内。
- 相关回复 上下关系8
5. varargs变长参数表 老兵帅客 字1822 2004-10-02 18:58:27
😉我们是否应该使用这个Feature呢?Sun的观点是: Highway 字510 2004-10-03 22:03:57
4. Autoboxing and Unboxing 老兵帅客 字418 2004-10-02 18:36:38
3. Enumerated Types
.NET的enum和Java不一样,不是Class. Highway 字1283 2004-10-03 21:01:28
2. Generics 老兵帅客 字2941 2004-10-01 17:35:35
这里又一篇关于C# Generics的详细介绍,比较不错! Highway 字107 2004-10-02 06:56:30
1.3 Ordering Queues Using Comparators 老兵帅客 字1658 2004-10-01 16:46:18