java 运行时修改注解值的方法。注释值修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 运行时修改注解值的方法。注释值修改相关的知识,希望对你有一定的参考价值。

public static void main(String[] args) throws Exception {
    final Something oldAnnotation = (Something) Foobar.class.getAnnotations()[0];
    System.out.println("oldAnnotation = " + oldAnnotation.someProperty());
    Annotation newAnnotation = new Something() {

        @Override
        public String someProperty() {
            return "another value";
        }

        @Override
        public Class<? extends Annotation> annotationType() {
            return oldAnnotation.annotationType();
        }
    };
    Field field = Class.class.getDeclaredField("annotationData");
    field.setAccessible(true);
    Object object = field.get(Foobar.class);
    field = object.getClass().getDeclaredField("annotations");
    field.setAccessible(true);
    Map<Class<? extends Annotation>, Annotation> annotations = (Map<Class<? extends Annotation>, Annotation>) field.get(object);
    annotations.put(Something.class, newAnnotation);

    Something modifiedAnnotation = (Something) Foobar.class.getAnnotations()[0];
    System.out.println("modifiedAnnotation = " + modifiedAnnotation.someProperty());
}

@Something(someProperty = "some value")
public static class Foobar {
}

@Retention(RetentionPolicy.RUNTIME)
@interface Something {

    String someProperty();
}

以上是关于java 运行时修改注解值的方法。注释值修改的主要内容,如果未能解决你的问题,请参考以下文章

在运行时修改方法注释参数

通过lombok注解修改java实体类中set方法的默认返回值

Java方法中传递数组与改变数组值的问题

Java方法中传递数组与改变数组值的问题

Java中的参数传递

在运行时修改类定义的注释字符串参数