Java笔记——注释(Annotation)

Fighting.jpg

Annotation 是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象,通过Annotion对象来取得注解里的元数据。有的Annotation指的是java.lang.Annotation接口,有的是的是注解本身。

@Override 限定重写父类方法

@Override指定方法覆载的,强制一个子类覆盖父类;作用:让编译器检查这个方法,保证父类要包含一个被该方法重写方法。

只能修饰方法,不能修饰其他元素

@Deprecated 标示已过时

@SuppressWarnings 抑制编译器警告

@SuppressWarnings指示被该Annotation修饰的程序取消元素(会作用该程序元素的所有子元素《假如 某个类中有编译器警告,类中也有编译器警告,只需要注释类的编译器警告就好》)显示指定的编译器警告

@FunctionalInterface

@FunctionalInterface规定如果接口只有一个抽象方法(可以包含多个默认方法或多个static方法,)该接口就是函数式接口。@FunctionalInterface用来指定某个接口必须是函数式接口。

@FunInterface只能修饰接口,不能修饰其他程序元素

JDK的元Annotation,元Annotation可以修饰其他的Annotation定义。

@Retention

  • 只能修饰Annotation定义,指定被修饰的Annotation可以保留的时长
  • @Retention包含一个RetentionPplicy类型的value成员变量,因此使用@Retention时必须为value成员变量指定值。
    • RetentionPolicy.CLASS :编译器被Annotaion记录在class文件中。当运行Java程序时,JAM不可获取Annotation信息。这是默认值
    • RetentionPolicy.RUNTIME:编译器将把Annotation记录在class文件中。当运行Java程序时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息
    • RetentiionPoicy.SOURCE:Annotation只保留在源代码中,编译器直接丢弃这种Annotation

如果需要获取注解的信息,就需要注解value的属性值为RetentionPolicy.RUNTIME的@Retention

@Retention(Retention.CLASS)  
@Retention(Retention.RUNTIME)
@Retention(Retention.SOURCE)

@Target

@Target也只能修饰一个Annotation定义,用于指定被修饰Annotation鞥用于修饰哪些程序单元。 @Target元Annotation也包含一个名为value的成员变量。

  • ElementType.ANNOTATION_TYPE :指定该策略的Annotation只能修饰Annotation
  • ElementType.CONSTRUCTOR :指定该策略的Annotation只能修饰构造器
  • ElementType.FIELD: 指定该策略的Annotation只能修饰成员变量
  • ElementType.LOCAL_VARIABLE:指定该策略的Annotation只能修饰局部变量
  • ElementType.METHOD : 指定该策略的Annotation只能修饰方法定义
  • ElementType.PACKAGE :指定该策略的Annotation只能修饰包定义
  • ElementType.PARAMETER: 指定该策略的Annotation 可以修饰参数
  • ElementType.TYPE : 指定该策略的Annotation可以修饰类、接口或者枚举定义。

使用方法更Retention有点类似

@Target(ElementType.FIELD)

@Documented

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

你可能感兴趣的:(Java笔记——注释(Annotation))