我想为一些方法生成的一些值提供注解。
到目前为止我已经试过了:
public @interface MyInterface {
String aString();
}
@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME)
public class MyClass {
static final String GENERIC_GENERATED_NAME = MyClass.generateName(MyClass.class);
public static final String generateName(final Class<?> c) {
return c.getClass().getName();
}
}
以为 GENERIC_GENERATED_NAME
是 static final
,它提示说
The value for annotation attribute
MyInterface.aString
must be a constant expression
那么如何实现呢?
最佳答案
无法动态生成注释中使用的字符串。编译器在编译时评估 RetentionPolicy.RUNTIME
注释的注释元数据,但 GENERIC_GENERATED_NAME
直到运行时才知道。并且您不能将生成的值用于 RetentionPolicy.SOURCE
的注释,因为它们在编译后被丢弃,因此这些生成的值将永远不为人知。
关于以动态方式提供的 Java 注释值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636201/