一、枚举暂时跳过。因为Android开发,枚举量级有点重,尽量用常量值
二、注解
第35条 注解优先于命名模式
Java1.5发行前,一般使用命名模式 naming pattern,表示有些程序元素需要通过某种方法进行特殊处理。如,JUnit测试框架原来要求用户一定要用test作为测试方法名称的开头。这种做法有几个缺点:
- 文字拼写容易拼错,且没有任何提示
- 无法确保它们只用于相应的程序元素上
- 没有提供将特殊处理用到的参数值与程序元素关联起来的方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}
上面的@Retention @Target 称为元注解 meta-annotation。用于定义新的注解类型。
@Test
public static void add(int i, int j) {}
上面@Test,称作标记注解(marker annotion)
注解处理常用的:
Class.getDeclaredMethods()
Method.isAnnotationPresent(Test.class)
Method.invoke();
Method.getAnnotation(ExceptionTest.class).value()
Class.isInstance(Class)
既然有了注解,就完全没有必要再使用命名模式了。
除了工具开发者,或是基础库开发者之外,大多数程序员都不必定义注解类型。但是所有的程序员都应该使用Java平台所提供的预定义的注解类型。还要考虑使用IDE或静态分析工具所提供的任何注解。这些注解可以提升诊断信息的质量。
第36条 坚持使用Override注解
应该在想要覆盖父类的每个方法上使用Override注解。在编译期及时发现 方法名 或 方法签名 写错的问题。
第37条 用标记接口定义类型
标记接口 marker interface 与 标记注解 marker annotation
标记接口的优点:
- 标记接口定义的类型,由实例实现;此类型可以在编译时就发现错误,而不是像注解那样在运行时才能发现错误。
- 可以被更加精确地进行锁定。注解类型可以用@Target(ElementType.TYPE)声明,这样它可以被用在任意的类或接口上。而标记接口可以预定为某具体领域相关的类才能使用。
标记注解的优点:
- 可以在同一个程序元素上,添加多个注解,以赋予元素更多的意义
- 它们是更大注解机制的一部分。因此,注解在那些支持注解作为编程元素之一的框架中同样具有一致性。??这一点无法理解,什么意思??
如果定的注解类型的Target是TYPE时,要考虑一下,是否可以用标记接口替代,以利用编译时就能发现错误的优势。