【问题标题】:Java - How to edit annotation fields at runtime?Java - 如何在运行时编辑注释字段?
【发布时间】:2018-03-15 21:33:06
【问题描述】:

我写了这个简单的注释:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface CSVColumn {
    String name();

    int order();
}

我目前正在使用它来注释类的一些 getter 方法。 我能够在运行时获取此注释的值:

    Class classType = objects[0].getClass();
    Method[] methodsArray = classType.getDeclaredMethods();
    List<Method> methods = Arrays.asList(methodsArray);
    //FIlter annotated methods
    methods = methods.stream().filter(method -> method.getAnnotation(CSVColumn.class) != null).collect(Collectors.toList());

    Iterator<Method> methodIterator = methods.iterator();

    while (methodIterator.hasNext()) {
        Method method = methodIterator.next();
        CSVColumn csvColumn = method.getAnnotation(CSVColumn.class);
        String header = csvColumn.name();
    }

但是如何将注释的字段 name 设置为另一个值? 我应该/可以在注解类中声明一些 setter 方法吗?

【问题讨论】:

  • 尽管可以通过挖掘 JVM 内部结构在运行时更改注释,但您真的不应该这样做。您需要想出一个不同的数据结构来存储您需要在运行时更改的信息。

标签: java annotations


【解决方案1】:

使用实用程序类AnnotationUtil

你可以changeAnnotation(csvColumn, "name", "newName")

【讨论】:

  • 谢谢你,我会从你的回购中学到很多东西。这是一项了不起的工作,恭喜。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多