【Java】Java元注解详解

在Java中,元注解(Meta-Annotations)是用于修饰其他注解的注解。Java提供了几个内置的元注解,这些元注解可以定义注解的类型、保留策略、作用域等。以下是Java中常用的元注解:

  • @Target

用于指定被修饰的注解能用于哪些地方。可能的ElementType值有:

  • ElementType.TYPE:用于类、接口(包括注解类型)或enum声明
  • ElementType.FIELD:用于字段(包括enum实例)
  • ElementType.METHOD:用于方法
  • ElementType.PARAMETER:用于方法的参数
  • ElementType.CONSTRUCTOR:用于构造器
  • ElementType.LOCAL_VARIABLE:用于局部变量
  • ElementType.ANNOTATION_TYPE:用于注解类型
  • ElementType.PACKAGE:用于包声明

  • @Retention

用于指定被修饰的注解的保留策略。可能的RetentionPolicy值有:

  • RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注解
  • RetentionPolicy.CLASS:在class文件中有效(即class保留),当运行Java程序时,JVM不会保留注解。这是默认值
  • RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注解。程序可以通过反射获取该注解

  • @Documented
    • 用于指定被修饰的注解可以被javadoc和类似的工具文档化。默认情况下,javadoc不记录注解类型,但加上此注解后,javadoc就会像记录类和方法的注释那样,记录注解。
  • @Inherited
    • 表示一个注解类型会被自动继承。如果一个类使用了某个被@Inherited修饰的注解,则其子类将自动具有该注解类型(前提是没有显式地拒绝这个继承)。注意,此注解仅针对类继承时有效,对接口继承是无效的。
  • @Repeatable(自Java 8起):
    • 用于表示注解可以多次应用于同一声明或类型使用上。要创建可重复的注解,需要将@Repeatable注解添加到容器注解中,该容器注解的类型是一个元素的类型为要重复的注解类型的数组。

下面是一个使用元注解的例子:

@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface MyAnnotation {  
    String value() default "";  
}  
  
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Inherited  
public @interface MyDocumentedInheritedAnnotation {  
    String description() default "";  
}  
  
@Repeatable(MyAnnotations.class)  
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface MyRepeatableAnnotation {  
    String value() default "";  
}  
  
// 容器注解  
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface MyAnnotations {  
    MyRepeatableAnnotation[] value();  
}

在这个例子中,MyAnnotationMyDocumentedInheritedAnnotationMyRepeatableAnnotation都是自定义注解,而它们分别使用了不同的元注解来定义它们的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值