JAVA中注解的理论解说
一、
@Inherited作用是,使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,
子类会自动继承此注解,否则的话,子类不会继承此注解。
这里一定要记住,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效
二、
@Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被
javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
三、
@Retention
RetentionPolicy为SOURCE的时机,在文件转换为CLASS文件后注解会自动销毁
RetentionPolicy为CLASS的时机,在虚拟机过后注解会自动销毁
RetentionPolicy为RUNTIME的时机,可像是您使用Java设计一个程式码分析工具,您要VM读出Annotation资讯,以在分析程式中使用,搭配Reflection机制,就可以达到这个目的
四、
@target是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件
五、
@Repeatable 注解是用于声明其它类型注解的元注解,来表示这个声明的注解是可重复的。@Repeatable的值是另一个注解,其可以通过这个另一个注解的值来包含这个可重复的注解。
六、
isAnnotationPresent
在if内使用可以if(注解类.isAnnotationPresent(注解类.class))
判断该注解属于什么类
=============================================================
anno.annotationType()==MyAnnotaion.class
对比两个注解是否匹配
七、
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,
因为编译器以为这个方法是你的子类中自己增加的方法。
举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性
八、
@Deprecated
九、
@SuppressWarnings
@SafeVarargs
因为varargs会导致堆污染:
Varargs method could cause heap pollution from non-reifiable varargs parameter
为了解决这个问题,Java7引入了@SafeVarargs注释。这将告诉编译器该方法或构造函数不会对varargs参数执行可能不安全的操作。
@SafeVarargs
注释在某个方法上面表示禁止编译器警告未经检查的警告。
但是添加@SafeVarargs到可能不安全的方法上将导致在运行时抛出ClassCastException。
何时应用此注释?
将变量参数传递给方法或构造函数时,不要改变或转换对象类型。该方法可能是安全的。
在哪里应用此注释?
使用在final和static方法。这可以防止它覆盖方法。接口中的方法不应该使用这个注释。