关键词搜索

源码搜索 ×
×

(Java)通过反射取得 Annotation

发布2020-02-23浏览530次

详情内容

与 Annotation 有关的操作:
在这里插入图片描述

一、取得全部的 Annotation

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

class SimpleBeanOne{
    @SuppressWarnings("unchecked")
    @Deprecated
    @Override
    public String toString(){
        return "Hello Java";
    }
}

public class Test{
    public static void main(String[] args) throws Exception{
        Class<?> c = null;
        c = Class.forName("SimpleBeanOne");
        Method toM = c.getMethod("toString");//取得 toString() 方法
        Annotation an[] = toM.getAnnotations();//取得全部的 Annotation
        for (Annotation a:an){
            System.out.println(a);
        }
    }
}

    要想取得 SimpleBeanOne 中 toString() 方法的全部 Annotation,必须首先通过反射找到 toString() 方法。
    在这里插入图片描述
    这里虽然使用了 3 个 Annotation 注释,但是最后真正得到的只有一个,因为只有 Deprecated 使用了 RUNTIME 的方式声明,所以只有它可以取得。

    二、取得指定的 Annotation 中的内容

    可以使用 isAnnotationPresent() 方法进行判断:

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.reflect.Method;
    @Retention(value = RetentionPolicy.RUNTIME)//此 Annotation 在类执行时依然有效
    @interface MyDefaultAnnotationReflect{
        public String key() default "J1";
        public String value() default "J2";
    }
    
    class SimpleBeanOne{
        @SuppressWarnings("unchecked")
        @Deprecated
        @Override
    //    使用自定义的 Annotation 并设置两个属性内容
        @MyDefaultAnnotationReflect(key = "J3",value = "J4")
        public String toString(){
            return "Hello Java";
        }
    }
    
    public class Test{
        public static void main(String[] args) throws Exception{
            Class<?> c = null;
            c = Class.forName("SimpleBeanOne");
            Method toM = c.getMethod("toString");
            if (toM.isAnnotationPresent(MyDefaultAnnotationReflect.class)){
                MyDefaultAnnotationReflect mda = null;//声明自定义的 Annotation
    //            取得自定义的 Annotation
                mda = toM.getAnnotation(MyDefaultAnnotationReflect.class);
                String key = mda.key();
                String value = mda.value();
                System.out.println("key = " + key);
                System.out.println("value = " + value);
            }
        }
    }
    
    
      24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    可以发现适当的使用反射机制,就可以将 Annotation 中指定的内容设置到对应的操作中

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载