我在java中创建了一个带有一个值(String []);
的自定义注释@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
String[] value ();
}
但是,我希望值 - 当我使用MyAnnotation时 - 如下所示:aClassName.anAttribute
anAttribute是它的一个属性,它是一个String:
public static String anAttribute1="aStringxxx";
但我收到错误:The value for annotation attribute MyAnnotation.value must be a constant expression
有人有想法吗?
答案 0 :(得分:2)
如果您创建属性final
,它将正常工作。
public class SomeClass {
public static final String myAttribute = "abc";
}
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String[] value();
}
public class SomeOtherClass {
@MyAnnotation({SomeClass.myAttribute})
private int someInt;
}
答案 1 :(得分:1)
解决方法是将anAttribute1
标记为static final
,使其成为常量表达式。
class MyAttributeConstants {
public static final anAttribute1 = "someString";
}
答案 2 :(得分:0)
我不确定我是否正确理解了你的问题,但AFAIK你不能使用在使用注释的同一个类中定义的常量。
可能的解决方案:将常量移动到辅助类