• 从一个类上获取不到注解的原因


    场景

    定义一个注解
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
    }
    
    一个父类
    @MyAnnotation
    public class OneClass {
    }
    
    一个子类
    public class TwoClass extends OneClass {
    }
    
    public class Main {
        public static void main(String[] args) {
            System.out.println(OneClass.class.getAnnotation(MyAnnotation.class));
            System.out.println(TwoClass.class.getAnnotation(MyAnnotation.class));
        }
    }
    
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    null
    
    可以看出 从子类身上是获取不到 注解的
    

    解决方案:

    • 使用 Spring中的工具类 AnnotationUtils
    public class Main {
        public static void main(String[] args) {
            System.out.println(OneClass.class.getAnnotation(MyAnnotation.class));
            System.out.println(TwoClass.class.getAnnotation(MyAnnotation.class));
            System.out.println(AnnotationUtils.findAnnotation(TwoClass.class, MyAnnotation.class));
        }
    }
    
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    null
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    
    • 在注解上加上元注解 @Inherited
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    public @interface MyAnnotation {
    }
    
    public class Main {
        public static void main(String[] args) {
            System.out.println(OneClass.class.getAnnotation(MyAnnotation.class));
            System.out.println(TwoClass.class.getAnnotation(MyAnnotation.class));
            System.out.println(AnnotationUtils.findAnnotation(TwoClass.class, MyAnnotation.class));
        }
    }
    
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    @cn.eagle.li.java.reflect.annnotation.MyAnnotation()
    
  • 相关阅读:
    POJ 1966 Cable TV Network
    POJ 3204 Ikki's Story I
    Codeforces Round #388 (Div. 2)
    BZOJ 后缀自动机四·重复旋律7
    扩展欧几里得 exGCD
    网络流模板 NetworkFlow
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
    BZOJ 3224: Tyvj 1728 普通平衡树
    BZOJ 1070: [SCOI2007]修车
    BZOJ 4552: [Tjoi2016&Heoi2016]排序
  • 原文地址:https://www.cnblogs.com/eaglelihh/p/16054070.html
Copyright © 2020-2023  润新知