@Documented
注解是否将包含在JavaDoc中
@Retention
什么时候使用该注解
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
@Target
注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。
ElementType.Type:用于描述类、接口或enum声明
ElementType.FIELD:用来描述实例变量
ElementType.METHOD
ElementType.PARAMETER
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION:另一种注释
ElementType.PACKAGE:用来记录java文件的package信息
@Inherited
是否允许子类继承该注解
总结
• 注解方法不能带有参数;
• 注解方法返回值类型限定为:基本类型、String、Enums、Annotation或者是这些类型的数组;
• 注解方法可以有默认值;
• 注解本身能够包含元注解,元注解被用来注解其它注解。
Java提供了三种内建注解。
1、@Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。
2、 @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java在javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。
3、 @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。
元注解是指注解的注解。包括 @Retention @Target @Document @Inherited四种。
注解的可用的类型包括以下几种:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。
参考1:Java中的注解是如何工作的?
参考2:Java注解教程及自定义注解
参考3:深入理解Java:注解(Annotation)–注解处理器
参考4:java中注解的使用与实例(一)
参考5:Java注解处理器