一、Java提供了三种内建注解。
1. @Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。
2. @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java在javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。
3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。
二、四种类型的元注解:
1. @Documented —— 指明拥有这个注解的元素可以被javadoc此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。如果一种声明使用Documented进行注解,这种类型的注解被作为被标注的程序成员的公共API。
2. @Target——指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解没有出现,那么定义的注解可以应用于程序的任何元素。
3. @Inherited——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查询当前类的父类是否存在Inherited元注解,这个动作将被重复执行知道这个标注类型被找到,或者是查询到顶层的父类。
4.@Retention——指明了该Annotation被保留的时间长短。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。
三、自定义注解:.
1 import java.io.FileNotFoundException; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 public class AnnotationExample { 6 7 public static void main(String[] args) { 8 } 9 10 @Override 11 @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 1) 12 public String toString() { 13 return 'Overriden toString method'; 14 } 15 16 @Deprecated 17 @MethodInfo(comments = 'deprecated method', date = 'Nov 17 2012') 18 public static void oldMethod() { 19 System.out.println('old method, don't use it.'); 20 } 21 22 @SuppressWarnings({ 'unchecked', 'deprecation' }) 23 @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 10) 24 public static void genericsTest() throws FileNotFoundException { 25 List l = new ArrayList(); 26 l.add('abc'); 27 oldMethod(); 28 } 29 30 }