打字猴:1.700445779e+09
1700445779 编写高质量代码:改善Java程序的151个建议 [:1700438154]
1700445780 编写高质量代码:改善Java程序的151个建议 第6章 枚举和注解
1700445781
1700445782 日光之下,并无新事。
1700445783
1700445784 ——《圣经》
1700445785
1700445786 枚举和注解都是在Java 1.5中引入的,虽然它们是后起之秀,但其功效不可小觑,枚举改变了常量的声明方式,注解耦合了数据和代码。本章就如何更好地使用注解和枚举提出了多条建议,以便读者能够在系统开发中更好地使用它们。
1700445787
1700445788
1700445789
1700445790
1700445791 编写高质量代码:改善Java程序的151个建议 [:1700438155]
1700445792 编写高质量代码:改善Java程序的151个建议 建议83:推荐使用枚举定义常量
1700445793
1700445794 常量声明是每一个项目都不可或缺的,在Java 1.5之前,我们只有两种方式的声明:类常量和接口常量,若在项目中使用的是Java 1.5之前的版本基本上都是如此定义的。不过,在1.5版以后有了改进,即新增了一种常量声明方式:枚举声明常量,看如下代码:
1700445795
1700445796 enum Season{
1700445797
1700445798 Spring, Summer, Autumn, Winter;
1700445799
1700445800 }
1700445801
1700445802 这是一个简单的枚举常量命名,清晰又简单。顺便提一句,JLS(Java Language Specification, Java语言规范)提倡枚举项全部大写,字母之间用下划线分隔,这也是从常量的角度考虑的(当然,使用类似类名的命名方式也是比较友好的)。
1700445803
1700445804 可能有读者要问了:枚举常量与我们经常使用的类常量和静态常量相比有什么优势?问得好,枚举的优点主要表现在以下四个方面。
1700445805
1700445806 (1)枚举常量更简单
1700445807
1700445808 简不简单,我们来对比一下两者的定义和使用情况就知道了。先把Season枚举翻写成接口常量,代码如下:
1700445809
1700445810 interface Season{
1700445811
1700445812 int Spring=0;
1700445813
1700445814 int Summer=1;
1700445815
1700445816 int Autumn=2;
1700445817
1700445818 int Winter=3;
1700445819
1700445820 }
1700445821
1700445822 此处定义了春夏秋冬四个季节,类型都是int,这与Season枚举的排序值是相同的。首先对比一下两者的定义,枚举常量只需要定义每个枚举项,不需要定义枚举值,而接口常量(或类常量)则必须定义值,否则编译通不过,即使我们不需要关注其值是多少也必须定义;其次,虽然两者被引用的方式相同(都是“类名.属性”,如Season.Spring),但是枚举表示的是一个枚举项,字面含义是春天,而接口常量却是一个int类型,虽然其字面含义也是春天,但在运算中我们势必要关注其int值。
1700445823
1700445824 (2)枚举常量属于稳态型
1700445825
1700445826 例如,我们要给外星人描述一下地球上的春夏秋冬是什么样子的,使用接口常量应该是这样写。
1700445827
1700445828 public void describe(int s){
[ 上一页 ]  [ :1.700445779e+09 ]  [ 下一页 ]