我认为这在 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[] 常量为注释提供值吗?
编译常量只能是原语和字符串:
15.28。 常量表达式 编译 时常量表达式 是表示原始类型值或字符串的表达式,它不会突然完成并且仅使用以下内容组成: 原始类型的文字和类型的文字String 转换为原始类型和转换为类型String […] 运营商 […] 带括号的表达式,其包含的表达式是常量表达式。 引用常量变量的简单名称。 TypeName 形式的限定名称。引用常量变量的 标识符。
15.28。 常量表达式
编译 时常量表达式 是表示原始类型值或字符串的表达式,它不会突然完成并且仅使用以下内容组成:
String
实际上在java中没有办法保护数组中的项目。在运行时总是有人可以做FieldValues.FIELD1[0]="value3"的,因此如果我们深入研究,数组不可能是真正的常数。
FieldValues.FIELD1[0]="value3"