如何将字符串变量传递给属性文件中存在String变量的带注释的类

时间:2018-03-19 05:50:17

标签: java annotations

如何将字符串变量传递给带注释的类,其中String变量存在于属性文件中?

我看到错误消息:注释属性的值Example.localID必须是常量

例如,请考虑下面的annoated interface

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Example {

  String localID() default "";
}

我创建了一个类'ExampleService',用“Example”界面注释,如下所示

我喜欢将localID的值提供为'localID = Messages.TITLE',如下所示。

目前由于编译错误,不可能提供这样的值,有没有办法解决这个问题或替代方案(我不想做出最终因为值根据本地变化)?

'Messages.TITLE'值来自属性文件。

@Example(localID=Messages.TITLE)
public class ExampleService {
}

类:消息

public class Messages extends NLS {

    public static String        TITLE;
    private static final String BUNDLE_NAME = "xyz"; //$NON-NLS-1$

    static {

        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
    }
private Messages() {
}

1 个答案:

答案 0 :(得分:0)

JAVA中的常量表示在编译期间确定的值。属性中的字符串不是常量。所以Messages.TITLE,无论是否为final,如果来自属性,都不能用作Annotation的属性值。

恕我直言,你应该仔细考虑使用可变值作为注释属性的原因。

对于替换,也许您可​​以使用class作为属性,使用注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Example {

  Class localID();
}

和ExampleService一样

@Example(localID=Messages.class)
public class ExampleService {
}

在您实际使用localID的地方,使用反射来检索Title的值。