侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用反射检查类上的自定义注解

2025-12-13 / 0 评论 / 4 阅读

题目

使用反射检查类上的自定义注解

信息

  • 类型:问答
  • 难度:⭐

考点

自定义注解定义,反射获取注解,注解保留策略

快速回答

实现步骤:

  1. 使用@interface定义注解并设置@Retention(RetentionPolicy.RUNTIME)
  2. 在目标类上添加自定义注解
  3. 通过反射获取类的Class对象
  4. 使用getAnnotation()方法检查注解是否存在
## 解析

原理说明

Java反射允许在运行时检查类信息,注解需要设置@Retention(RetentionPolicy.RUNTIME)才能在运行时通过反射获取。核心步骤:定义注解→标记类→反射检查。

代码示例

// 1. 定义注解
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "";
}

// 2. 标记类
@MyAnnotation("测试类")
public class MyClass {}

// 3. 反射检查
public class AnnotationChecker {
    public static void main(String[] args) {
        Class<?> clazz = MyClass.class;
        MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);

        if (annotation != null) {
            System.out.println("找到注解! 值: " + annotation.value());
        } else {
            System.out.println("未找到注解");
        }
    }
}

最佳实践

  • 始终为运行时注解设置@Retention(RetentionPolicy.RUNTIME)
  • 使用getAnnotation()而非getAnnotations()获取特定注解
  • 检查注解非空后再读取属性值

常见错误

  • 忘记保留策略:未设置RetentionPolicy.RUNTIME导致反射无法获取
  • 大小写错误getAnnotation()方法名拼写错误
  • 类加载问题:未导入注解类或类路径错误

扩展知识

  • 元注解@Target指定注解使用位置(类/方法/字段等)
  • 注解继承:类注解默认不被子类继承,需配合@Inherited
  • 性能考虑:反射操作较慢,避免在高频代码中使用