Java 自定义批注出错

Java 自定义批注出错,java,annotations,Java,Annotations,我用java做了一个自定义注释,它接受一个值(字符串[]) 但是,我希望使用MyAnnotation时的值如下:aClassName.anaAttribute aClassName是我的应用程序中的类的名称 anAttribute是它的一个属性,它是一个字符串: 公共静态字符串anAttribute1=“aStringxxx” 但是我得到一个错误:注释属性MyAnnotation.value的值必须是一个常量表达式 有人有什么想法吗?我不确定是否正确理解了您的问题,但您不能使用在使用注释的同

我用java做了一个自定义注释,它接受一个值(字符串[])

但是,我希望使用MyAnnotation时的值如下:aClassName.anaAttribute

  • 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;
}