分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

新的“类型安全的枚举”(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语句用在一起。当你希望给一个枚举类增加一个方法而不想修改你的应用程序的时候,这个性质非常有用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有