欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

六、编写高质量的代码—枚举和注解(笔记)

程序员文章站 2022-06-16 16:38:32
...

本博文为《编写高质量代码—改善Java程序的151个建议》一书的阅读笔记。该书从很多方面给予了编写高质量代码的宝贵经验。而且该书应该是那种开发经验越丰富,体会越深的书籍。在阅读过程中,从该书中收获良多,这里主要作下书籍笔记,有体会的地方加点自己的想法。受限于知识水平,部分内容还没能深刻体会,所以更多更好的内容和具体实例还需要从书中去找寻。

一、推荐使用枚举类定义常量

常量声明主要有三种方式:类常量、接口常量、枚举常量,而枚举常量与类常量、接口常量相比有如下优势:
1. 枚举常量定义更加简单直接。
2. 枚举常量属于稳态性,不要做过多校验。
3. 枚举常量具有内置方法,枚举类自带的很多方法可以简化常量的访问。
4. 枚举常量可以自定义方法,每个枚举项都该枚举的实例。 因此推荐使用枚举常量,个人觉得枚举常量在一组相关联的常量定义时非常适用。

二、使用构造函数协助描述枚举项

由于每个枚举项都是该枚举类的实例,所以在需要该枚举项需要额外描述时可以通过构造函数进行补充。

三、switch判断时小心空值异常

switch判断后面可以是枚举类型,因为判断时会调用枚举项的ordinal方法,拿到对应的序号进行判断,所以在switch判断时需要避免判断的枚举对象为空,不然会报空指针异常。

四、使用valueOf前必须进行校验

Enum.valueOf方法可以把String类型的参数转化成字面值相同的枚举项,不过需要注意当找不到相同的枚举项时转换会报出参数异常。所以在调用方法最好进行校验,判断该字面值是否存在,具体的做法可以在枚举类中实现“contains方法”。

五、@Override不同版本的区别 

@Override注解用于方法的覆写上,它在编译期有效,用于校验方法是否是覆写,如果不是就报错,拒绝编译。但是这个注解在不同JDK版本中略有区别,在JDK 1.5版本中如果父类是一个接口,实现类实现了接口的具体方法,此时加@Override是会编译不通过,因为认为这不是覆写,而是实现接口方法。不过在JDK 1.6及以上的版本,这种限制放宽了,实现接口方法也可以加上@Override注解。