分享
 
 
 

J2SE1.5的新特点(之二)

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

J2SE1.5的新特点(之二)

类型安全的枚举比以前的枚举有什么优点呢?

有如下特点:

提供编译时int枚举的安全检查,同时不再提供其他类型安全检查。

提供了枚举的命名空间

可以直接把它们放到集合中。

因为他们本质上是类,你可以向里面添加属性和方法。

上面的这些特点的确不错。能讲讲类型安全的枚举语言的特点和类型安全的枚举模式的关系吗?

一般来说:上面的那些特点简单的从语义上支持了模式。看下面的例子,和C/C++ 枚举的声明很相似:

enum Season { winter, spring, summer, fall }

声明虽然相似,但是确让编译器实现了上面提到的许多特性。你还可以把Season用到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; }

}

这是个创举。我们定义了value来作为读取Coin的公共变量。在枚举的构造函数中可以在声明枚举实例的时候来初始化它。

让我们看看进一步使用这个枚举的例子。

我把不的呢。下面的程序打印一个表格和其中coin的大小和颜色。

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);

}

}

}

太帮了。那么静态引入static import 的功能对程序员有什么帮助呢?

首先他避免了程序员使用前缀的静态成员。以前常见的的一个替代的做法是:

// "Constant Interface" antipattern – 不推荐的做法

public interface Physics {

public static final double AVOGADROS_NUMBER = 6.02214199e23;

public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;

public static final double ELECTRON_MASS = 9.10938188e-31;

}

public class Guacamole implements Physics {

public static void main(String[] args) {

double moles = ...;

double molecules = AVOGADROS_NUMBER * moles;

...

}

}

上面的做法达到了效果,可是却违背了一些设计原则。接口是用来定义方法和类型的,不是提供常量声明的。而且只是由Guacamole使用的常量也暴露给了使用其的客户端。

静态引入功能提供了一个简单的实现。这个功能和包的import功能类似。

import static org.iso.Physics.*;

class Guacamole {

public static void main(String[] args) {

double molecules = AVOGADROS_NUMBER * moles;

...

}

}

明白,那么什么是元数据类型metadata的功能呢?

使用metadata和第三方工具提供商可以让程序员自己的日子好过点。

以前许多发布API需要大量的描述信息。比如:定义一个JAX-RPC 网络服务API你需要提供其接口和实现类。如下:

public interface CoffeeOrderIF extends java.rmi.Remote {

public Coffee [] getPriceList()

throws java.rmi.RemoteException;

public String orderCoffee(String name, int quantity)

throws java.rmi.RemoteException;

}

public class CoffeeOrderImpl implements CoffeeOrderIF {

public Coffee [] getPriceList() {

...

}

public String orderCoffee(String name, int quantity) {

...

}

}

使用元数据功能,你可以节省大量的工作。你所需要做的是在代码上加上特殊的注释。你所使用的开发工具可是使用这些注释自动生成相关的代吗。如下所示:

import javax.xml.rpc.*;

public class CoffeeOrder {

@Remote public Coffee [] getPriceList() {

...

}

@Remote public String orderCoffee(String name, int quantity) {

...

}

}

的确非常好,可是我们不可能定义所有的属性和注释呀?

是的,但是 JSR-175 现在提供了一个 framework让第三方来定义属性和相关的工具。

全文完

==============

有些地方翻译的不准确希望大家原谅

accesine@163.com

==============

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有