西西河

主题:【原创】Java 1.5新特点的一些体验 -- 老兵帅客

共:💬14 新:
全看分页树展 · 主题 跟帖
家园 3. Enumerated Types

在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的范围内。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河