【发布时间】: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