java自定义注解以及通过反射取得注解的信息

java自定义注解的使用,通过反射取得注解的值

public class AnnotationTest {
    
    public enum Status{
        @Description("进行中")
        a,
        @Description("成功")
        b,
        @Description("失败")
        c,

    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.ANNOTATION_TYPE,ElementType.FIELD})
    @interface Description{
        String value() default "";
    }
    public static void main(String[] args) throws Exception {
        System.out.println(getDescription(Status.a.ordinal(),Status.class));
        System.out.println(getDescription(Status.a.name(),Status.class));

    }

    /**
     * 返回枚举字段的中文注解
     * @param ordinal 枚举常量的序数
     * @param clazz 枚举实例
     * @return 注解的value值
     * @throws Exception
     */
    public static String getDescription(int ordinal,Class<?> clazz) throws Exception {
        Status[] values = Status.values();
        //通过反射取得枚举中对应的枚举常量
        Object obj = ((Object[])(clazz.getMethod("values").invoke(clazz)))[ordinal];
        //取得枚举常量的名字
        String name=obj.getClass().getMethod("name").invoke(obj).toString();
        if (name==null){
            return "";
        }
        //取得对应的枚举字段
        Field field=clazz.getField(name);
        //取得注解类实例
        Description description = field.getAnnotation(Description.class);
        if (description==null){
            return name+":description if \"\"";
        }
        return description.value();
    }

    /**
     * 返回枚举字段的中文注解
     * @param enumName 枚举常量名
     * @param clazz 枚举实例
     * @return 注解的value值
     * @throws Exception
     */
    public static String getDescription(String enumName,Class<?> clazz) throws Exception {
        if (enumName==null){
            return "";
        }
        String name=enumName.toString();
        Field field=clazz.getField(name);
        Description description = field.getAnnotation(Description.class);
        if (description==null){
            return name+":description if \"\"";
        }
        return description.value();
    }
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值