Java:JDK的元Annotation

一、使用@Retention 

  • 只能修饰一个Annotation定义,用于指定该Annotation可以保留多长时间 

  • 包含一个RetentionPolicy类型的value成员变量 

    • RetentionPolicy.CLASS:编译器把注释记录在class文件中,当运行Java程序时,JVM不在保留注释,默认值 

    • RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中,当运行Java程序时,JVM也会保留注释,程序可以通过反射获取该注释 

    • RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注释 

//定义下面的Testable注解保留到运行时 
@Retention(value="RetentionPolicy.RUNTIME") 
public @interface Testable{} 

 

二、使用@Target 

  • 用于修饰一个Annotation定义,指定被修饰的Annotation能用于修饰哪些程序元素 

  • 包含一个名为value的成员变量 

    • ElementType.ANNOTATION_TYPE:只能修饰Annotation 

    • ElementType.CONSTRUCTOR:只能修饰构造器 

    • ElementType.FIELD:只能修饰成员变量 

    • ElementType.LOCAL_VARIABLE:只能修饰局部变量 

    • ElementType.METHOD:只能修饰方法定义 

    • ElementType.PACKAGE:只能修饰包定义 

    • ElementType.PARAMETER:只能修饰参数 

    • ElementType.TYPE:只能修饰类、接口(包括注释型)或枚举定义 

//定义下面的ActionListenerFor注解只能用于成员变量 
@Target(ElementType.FIELD) 
public @interface ActionListenerFor{}; 


三、使用@Documented 

  • 用于指定该元Annotation修饰的Annotation类将被javadoc工具提取成文档 

@Retention(value="RetentionPolicy.RUNTIME") 
@Target(ElementType.METHOD) 
//定义下面的Testable注解将被javadoc提取 
@Documented 
public @interface Testable{} 

四、使用@Inherited 

  • 指定它修饰的Annotation将具有继承性 

  • 如果某个类使用了A Annotation(定义该Annotation使用了@Inherited修饰)修饰,则其子类将自动具有A注释 

@Target (ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
@Inherited 
public @interface Inheritable { 
} 
 
//使用@Inheritable修饰Base类 
@Inheritable 
class Base{ 
} 
//TestInheritable类只是继承了Base类 
//并未直接使用@Inheritable Annotation修饰 
public class InheritableTest extends Base{ 
    public static void main(String[] args){ 
        System.out.println(InheritableTest.class.isAnnotationPresent(Inheritable.class)); 
    } 
} 

新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值