元注解介绍

本文介绍了Java中的元注解,如Retention用于控制注解生命周期,Target指定注解应用范围,以及如何创建和使用自定义注解(如@MethodInfo)并通过反射获取其信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@interface 准确的说它不是一个接口,而是一个新的注释类型-注释类,它的类名就是注释名
    元注解是用于修饰其它注解的注解。JDK5.0提供了四种元注解:
    @Retention
      只能用于修饰一个 Annotation 定义


     三种值:

   ▷ RetentionPolicy.SOURCE: 只在源代码阶段保留,编译后不保留,不会出现在字节码文件中。通常用于生成文档等工具。
   ▷ RetentionPolicy.CLASS: 在编译阶段保留,但不会加载到JVM中,在字节码文件中存在。这是Java默认的保留策略。
   ▷ RetentionPolicy.RUNTIME: 编在运行时保留,可以通过反射获取到这些注解。常用于运行时的动态处理。

    @Target 指定注解可以应用的目标元素类型。
    ElementType.TYPE:可以应用于类、接口或枚举。
    ElementType.FIELD:可以应用于字段或属性。
    ElementType.METHOD:可以应用于方法。
    ElementType.PARAMETER:可以应用于方法的参数。
    ElementType.CONSTRUCTOR:可以应用于构造函数。
    ElementType.LOCAL_VARIABLE:可以应用于局部变量。
    ElementType.ANNOTATION_TYPE:可以应用于其他注解。
    ElementType.PACKAGE:可以应用于包。


    @Inherited:用于指定注解是否具有继承性。
    如果一个注解被@Inherited元注解标记,并且它应用于某个类,那么这个注解会被其子类继承。在类继承关系中,子类会自动继承父类上的被@Inherited标记的注解。

    @Document
    用于指定注解是否应该被包含在JavaDoc文档中。
    如果一个注解被@Documented元注解标记,并且它应用于某个元素(如类、方法、字段等),则在生成JavaDoc文档时,这个注解会被包含在文档中,方便开发者查看。


如果一个注解被@Inherited元注解标记,并且它应用于某个类,那么这个注解会被其子类继承。在类继承关系中,子类会自动继承父类上的被@Inherited标记的注解。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// 定义元注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MethodInfo {
    String author() default "Unknown";
    String date();
    int revision() default 1;
    String comments();
}

public class MyClass {

    // 使用自定义注解
    @MethodInfo(author = "Alice", date = "2023-07-20", comments = "This is a sample method.")
    public void sampleMethod() {
        // Method implementation
    }

    public static void main(String[] args) {
        // 获取注解信息
        MethodInfo methodInfo = MyClass.class.getDeclaredMethod("sampleMethod").getAnnotation(MethodInfo.class);
        System.out.println("Author: " + methodInfo.author());
        System.out.println("Date: " + methodInfo.date());
        System.out.println("Revision: " + methodInfo.revision());
        System.out.println("Comments: " + methodInfo.comments());
    }
}

首先定义了一个名为MethodInfo的自定义注解,它具有authordaterevisioncomments等成员。然后,在MyClass类中,我们使用了@MethodInfo注解来标注一个方法sampleMethod()
main方法中,我们使用Java的反射机制获取了sampleMethod方法上的MethodInfo注解,并输出了注解中的信息,包括作者、日期、修订版本和注释。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值