站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题J2SE1.5便于开发的新语言特性:Joshua Bloch的访谈录(4)

J2SE1.5便于开发的新语言特性:Joshua Bloch的访谈录(4)

摘要: J2SE1.5便于开发的新语言特性:Joshua Bloch的访谈录(4)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />新的“类型安全的枚举”(typesafe enums)比用整数枚举(int enum)有什么优势?

这个问题在我的书第21项中有详细的论述。简要地说:

哇,这么厉害!那么新的类型安全的枚举语言特性和你书中类型安全的模式有什么关系?

这个特性是对类型安全模式的首次语言上的简单支持。那些有差不多半页、冗长的、易错的支持模式的代码现在看起来很像C/C++中枚举的声明:

enum Season { winter, spring, summer, fall }

不过它用起来却跟C/C++中的枚举大相径庭,你可以使用我们刚才讨论的所有的强大的功能。它甚至修正了类型安全模式的主要的缺点:你可以把这个新的语言特性和Switch语句用在一起。

你能给我们举例说明一下类型安全的枚举的强大功能吗?

当然可以。下面的这个枚举代表了一个美国硬币:

public enum Coin {

penny(1), nickel(5), dime(10), quarter(25);

Coin(int value) { this.value = value; }

private final int value;

public int value() { return value; }

}

看看,这个常数声明怎样调用了一个构造函数,输入一个整数代表分?还有,这个值怎样存放在一个带有公共访问方法的私有变量里面?这个就可以勾画出你能做的事情的轮廓。

您能给我一个类使用您上面定义的enum吗?

我正准备要说到这个。下面是一个小的例子,它用来输出分币表中各个分币的值和颜色。

public class CoinTest {

public static void main(String[] args) {

for (Coin c : Coin.VALUES)

System.out.println(c + ": \t"

+ c.value() +"¢ \t" + color(c));

}

private enum CoinColor { copper, nickel, silver }

private static CoinColor color(Coin c) {

switch(c) {

case Coin.penny: return CoinColor.copper;

case Coin.nickel: return CoinColor.nickel;

case Coin.dime:

case Coin.quarter: return CoinColor.silver;

default: throw new AssertionError("Unknown coin: " + c);

}

}

}

看看我们如何声明另外一个关于颜色的枚举?一个叫做nickeld的硬币和一个叫做nickel的颜色根本不会引起什么冲突,因为硬币和颜色都有它们自己的命名空间。同时你可以看到我们可以把枚举常数和Switch语句用在一起。当你希望给一个枚举类增加一个方法而不想修改你的应用程序的时候,这个性质非常有用。


作者Blog:http://blog.csdn.net/liuflei3139/


↑返回目录
前一篇: J2SE1.5便于开发的新语言特性: Joshua Bloch的访谈录(2)
后一篇: J2SE1.5便于开发的新语言特性:Joshua Bloch的访谈录(3)