Annotation 是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象,通过Annotion对象来取得注解里的元数据。有的Annotation指的是java.lang.Annotation接口,有的是的是注解本身。
@Override 限定重写父类方法
@Override指定方法覆载的,强制一个子类覆盖父类;作用:让编译器检查这个方法,保证父类要包含一个被该方法重写方法。</br>
只能修饰方法,不能修饰其他元素
@Deprecated 标示已过时
@SuppressWarnings 抑制编译器警告
@SuppressWarnings指示被该Annotation修饰的程序取消元素(会作用该程序元素的所有子元素《假如 某个类中有编译器警告,类中也有编译器警告,只需要注释类的编译器警告就好》)显示指定的编译器警告
@FunctionalInterface
@FunctionalInterface规定如果接口只有一个抽象方法(可以包含多个默认方法或多个static方法,)该接口就是函数式接口。@FunctionalInterface用来指定某个接口必须是函数式接口。</br>
@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</br>
@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说明。
网友评论