小编典典

如何从常量 java 为注解提供值

all

我认为这在 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[] 常量为注释提供值吗?


阅读 152

收藏
2022-08-16

共1个答案

小编典典

编译常量只能是原语和字符串

15.28。 常量表达式

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

  • 原始类型的文字和类型的文字String
  • 转换为原始类型和转换为类型String
  • […] 运营商 […]
  • 带括号的表达式,其包含的表达式是常量表达式。
  • 引用常量变量的简单名称。
  • TypeName 形式的限定名称。引用常量变量的 标识符。

实际上在java中没有办法保护数组中的项目。在运行时总是有人可以做FieldValues.FIELD1[0]="value3"的,因此如果我们深入研究,数组不可能是真正的常数。

2022-08-16