Java 自定义批注出错
我用java做了一个自定义注释,它接受一个值(字符串[]) 但是,我希望使用MyAnnotation时的值如下:aClassName.anaAttributeJava 自定义批注出错,java,annotations,Java,Annotations,我用java做了一个自定义注释,它接受一个值(字符串[]) 但是,我希望使用MyAnnotation时的值如下:aClassName.anaAttribute aClassName是我的应用程序中的类的名称 anAttribute是它的一个属性,它是一个字符串: 公共静态字符串anAttribute1=“aStringxxx” 但是我得到一个错误:注释属性MyAnnotation.value的值必须是一个常量表达式 有人有什么想法吗?我不确定是否正确理解了您的问题,但您不能使用在使用注释的同
- aClassName是我的应用程序中的类的名称
- anAttribute是它的一个属性,它是一个字符串:
公共静态字符串anAttribute1=“aStringxxx”代码>
注释属性MyAnnotation.value的值必须是一个常量表达式
有人有什么想法吗?我不确定是否正确理解了您的问题,但您不能使用在使用注释的同一类中定义的常量
可能的解决方案:将常量移动到助手类解决方案是将
anatribute1
标记为静态final
,使其成为常量表达式
class MyAttributeConstants {
public static final anAttribute1 = "someString";
}
如果将属性设置为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;
}
将属性设置为final。您的意思是将值设置为
String[]
而不是String
?谢谢^^我将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;
}