一尘不染

如何通过常量java为注释提供值

java

我认为这在Java中可能无法实现,因为注释及其参数在编译时已解决。我有一个如下的界面,

public interface FieldValues {
   String[] FIELD1 = new String[]{"value1", "value2"};
}

和另一类,

@SomeAnnotation(locations = {"value1", "value2"})
public class MyClass {
   ....
}

我用注解标记了许多类,我想知道是否可以避免在每个注解中指定字符串,而宁愿使用

@SomeAnnotation(locations = FieldValues.FIELD1)
public class MyClass {
   ....
}

但是,这会产生诸如注释值之类的编译错误,应该将其作为数组初始化程序等。有人知道我如何使用String常量或String []常量为注释提供值吗?


阅读 950

收藏
2020-03-05

共1个答案

一尘不染

15.28。常数表达式

编译时常量表达式是表示原始类型或String的值的表达式,该值不会突然完成,并且仅使用以下内容组成:

  • 基本类型的文字和类型的文字 String
  • 强制转换为基本类型并强制转换为类型 String
  • […]运营商[…]
  • 用括号括起来的表达式,其包含的表达式是一个常量表达式。
  • 引用常量变量的简单名称。
  • 表格的限定名类型名。引用常量变量的标识符。

实际上,在Java中,无法保护数组中的项。在运行时,任何人都可以做FieldValues.FIELD1[0]="value3",因此,如果我们更深入地研究数组,则数组不能真正恒定。

2020-03-05