自定义注释出错

时间:2013-05-08 14:18:11

标签: java annotations

我在java中创建了一个带有一个值(String []);

的自定义注释
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
    String[] value ();
}

但是,我希望值 - 当我使用MyAnnotation时 - 如下所示:aClassName.anAttribute

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

    public static String anAttribute1="aStringxxx";

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

3 个答案:

答案 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你不能使用在使用注释的同一个类中定义的常量。

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