2

我在java中做了一个自定义注释,它采用一个值(String []);

@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
    String[] value ();
}

但是,我希望值(当我使用 MyAnnotation 时)是这样的:aClassName.anAttribute

  • aClassName 是我的应用程序中的一个类的名称
  • anAttribute 是它的属性之一,它是一个字符串:

    public static String anAttribute1="aStringxxx";

但我收到一个错误:The value for annotation attribute MyAnnotation.value must be a constant expression 请问有人有想法吗?

4

3 回答 3

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;
}
于 2013-05-08T14:29:28.573 回答
1

解决方案是标记anAttribute1为 astatic final使其成为常量表达式。

class MyAttributeConstants {
  public static final anAttribute1 = "someString";
}
于 2013-05-08T14:29:12.177 回答
0

我不确定我是否正确理解了您的问题,但是AFAIK您不能使用在使用注释的同一类中定义的常量。

可能的解决方案:将常量移动到辅助类

于 2013-05-08T14:23:45.030 回答