十,Annotation

来源:互联网 发布:js构造函数prototype 编辑:程序博客网 时间:2024/05/16 13:06

5个基本的Annotation

  1. @Override
  2. @Deprecated
  3. @SuppressWarnings
  4. @SafeVarargs(Java 7新增)
  5. @FunctionalInterface(Java 8新增)

5个基本的Annotation详细解释

  • 限定重写父类方法:@Override

@Override就是用来指定方法重写,它可以强制一个子类必须覆盖父类的方法。该作用就是要告诉编译器检查@Override修饰的方法,保证父类要包含一个被该方法重写的方法,否则就会编译出错。该注解只能够修饰方法,不能修饰其他程序元素。

  • 标示已过时:@Deprecated

@Deprecated用于表示某个程序元素(类,方法等)已过时,当其他程序使用已过时的类,方法时,编译器将会给出警告。

  • 抑制编译器警告:@SuppressWarnings
    @SuppressWarnings指示被该Annotation修饰的程序元素(以及该程序元素中的所有子元素),取消显示指定的编译器警告。@SuppressWarnings会一直作用域该程序元素的所有子元素,例如,使用@SuppressWarnings修饰某个类取消显示某个编译器警告,同时又修饰该类里的某个方法取消显示另一个编译器警告,那么该方法将会同时取消显示这两个编译器警告。

  • Java 7的“堆污染”警告与@SafeVarargs

  • Java 8的函数式接口与@FunctionalInterface

Java 8规定:如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口就是函数式接口。该注解只能够修饰接口,不能够修饰其他程序元素。@FunctionalInterface只是告诉编译器检查这个接口,保证该接口只能包含一个抽象方法,否则就会编译出错。

JDK的元Annotation

JDK除了在java.lang下提供了5个基本的Annotation之外,还在java.lang.annotation包下提供了6个Meta Annotation,其中有5个元Annotation都用于修饰其他的Annotation定义。其中@Repeatable专门用于定义Java 8新增的重复注解。

1,@Retention

@Retention只能用于修饰Annotation定义,用于指定被修饰的Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的value成员变量,所以使用@Retention时候必须为该value成员变量指定值。
value成员变量的值只能是如下三个:

  • RetentionPolicy.CLASS:编译器将把Annotation记录在class文件中。当运行java程序时,JVM不可以获取Annotation信息。这是默认值
  • RetentionPolicy.RUNTIME:编译器将把Annotation记录在class文件中。当运行java程序时,JVM可以获取Annotation信息,程序也可以通过反射获取该Annotation信息。
  • RetentionPolicy.SOURCE:Annotation只保留在源代码中,编译器直接丢弃这种Annotation。

2,@Target

这里写图片描述

3,@Documented

@Documented用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,如果定义Annotation类时候使用了@Documented修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。

4,@Inherited

@Inherited元Annotation指定被它修饰的Annotation将具有继承性——如果某个类使用了@Xxx注解(定义该Annotation时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。

0 0
原创粉丝点击