| | 网站首页 | 政策法规 | 天文航天 | 地理人文 | 文学历史 | 科学生活 | 信息军事 | 卫生保健 | 奇妙自然 | 留言 | | |
![]() |
|
| 您现在的位置: 活到老学到老 >> 信息军事 >> 数据编程 >> 正文 |
|
|||||
| J2SE 5.0专题之语言特性(二) | |||||
作者:未知 文章来源:转载 点击数: 更新时间:2006-2-28 ![]() |
|||||
|
【IT168 编程开发】1.7类型安全的枚举 在介绍J2SE(TM) 5.0中引入的类型安全枚举的用法之前,我想先简单介绍一下这一话题的背景。 我们知道,在C中,我们可以定义枚举类型来使用别名代替一个集合中的不同元素,通常是用于描述那些可以归为一类,而又具备有限数量的类别或者概念,如月份、颜色、扑克牌、太阳系的行星、五大洲、四大洋、季节、学科、四则运算符,等等。它们通常看上去是这个样子: typedef enum {SPRING, SUMMER, AUTUMN, WINTER} season; Java一开始并没有考虑引入枚举的概念,也许是出于保持Java语言简洁的考虑,但是使用Java的广大开发者对于枚举的需求并没有因为Java本身没有提供而消失,于是出现了一些常见的适用于Java的枚举设计模式,如int enum和typesafe enum,还有不少开源的枚举API和不开源的内部实现。 我大致说一下int enum模式和typesafe enum模式。所谓int enum模式就是模仿C中对enum的实现,如: public class Season { public class Season { 最终,Java决定拥抱枚举,在J2SE(TM) 5.0中,我们看到了这一变化,它所采用的设计思路基本上就是上面提到的typesafe enum模式。它的语法很简单,用一个实际的例子来说,要定义一个枚举,我们可以这样写: public enum Language {CHINESE, ENGLISH, FRENCH, HUNGARIAN} public enum Operation { public static void main(String args[]) { 1.8. 可变长度参数 顾名思义,可变长度参数就是指在方法的参数体中,只要定义恰当,我们可以使用任意数量的参数,类似于使用数组。在J2SE(TM) 5.0中,一个新的语法被引入,就是在参数类型名称后面加上"...",表示该方法可以接受多个该类型的参数。需要说明的是可变长度参数必须放在参数列表的最后,且一个方法只能包含一个这样的参数。在方法体内部,这样的参数被当作数组处理,看上去代码应该类似这个样子: public String testVararg(String... args) { 1.9. 静态引入 所谓静态引入就是指除了引入类之外,我们现在又多了一种选择:引入某个类的静态字段。如: import static java.lang.Math.PI; 1.10. 元数据(注解) 注解是J2SE(TM) 5.0引入的重要语言元素,它所对应的JSR是JSR 175,我们先来看看JSR 175的文档对注解的说明: 注解不会直接影响程序的语义,而开发和部署工具则可以读取这些注解信息,并作相应处理,如生成额外的Java源代码、XML文档、或者其他将与包含注解的程序一起使用的物件。 在之前的J2SE版本中,我们已经使用到了一部分早期的注解元素,如@deprecated等。这些元素通常被用于产生HTML的Javadoc。在J2SE(TM) 5.0中,注解被正式引入,且推到了Java历史上前所未有的高度。 现在,注解不仅仅被用来产生Javadoc,更重要的,注解使得代码的编译期检查更加有效和方便,同时也增强了代码的描述能力。有一些注解是随着J2SE(TM) 5.0一起发布的,我们可以直接使用。除此之外,我们也可以很方便的实现自定义的注解。在此基础上,很多以前我们只能靠反射机制来完成的功能也变得更加容易实现。 我们来看现成的有哪些有用的注解: 首先是@Override,这个注解被使用在方法上,表明这个方法是从其父类继承下来的,这样的写法可以很方便的避免我们在重写继承下来的方法时,不至于不小心写错了方法签名,且悄悄的溜过了编译器,造成隐蔽性相当高的bug。 其次是@Deprecated,表明该项(类、字段、方法)不再被推荐使用。 还有一个@SuppressWarnings,表明该项(类、字段、方法)所涵盖的范围不需要显示所有的警告信息。这个注解需要提供参数,如unchecked等等。 下面我通过一个例子向大家说明这些现成的注解的用法: public class Main { public void doSomething() { 标记注解,类似@Deprecated,如: @interface SomeEmptyAnnotation {} @interface MySingleElementAnnotation { @interface MyAnnotationForMethods { @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface SignedMethod { @MyAnnotationForMethods ( public void testMethod1() { @Stateless public class BookShelfManagerBean { 1.11. C风格格式化输出 Java总算也有类似C的printf()风格的方法了,方法名同样叫作printf(),这一特性依赖于前边提到的可变长度参数。举个例子来说,我们现在可以写: System.out.printf("%s has a value of %d.%n", someString, a); 1.12. 结语 在这一篇介绍性的文章中,我们一起领略了J2SE 5.0带来的新的语言元素,不知道大家是否也跟笔者一样,感受到了这些新特性在提高我们的开发效率上所作的巨大努力。其实不只是语言元素,J2SE(TM) 5.0的发布在其他很多方面都作了不小的改进,包括虚拟机、新的API类库等等,性能和功能上都有大幅提升。 对于主要靠J2EE吃饭的朋友来讲,也许真正意义上要在工作中充分利用这些新的元素,恐怕要等主流的J2EE服务器都支持J2EE(TM) 5.0的那一天了,对此我充满期待。 |
|||||
| 文章录入:wswys 责任编辑:wswys | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 双击无法打开硬盘 双击打不开… 无法显示隐藏文件解决方法 Ping同一个域名得到不同IP是… 为何本地网卡会收发异常 如何下载网上的Flash动画 怎么用IE快速访问FTP站点 局域网内复制文件出错怎么办 如何限制外网访问内网 网络已通收发数据为何为零? 为何点击超链接没有反应 |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | | |
![]() |
『活到老学到老』 版权所有
|