我有一个非常长的String
常量,用于注释,该字符串本质上是一个逗号分隔的列表。我想做的是以下事情:
String str = String.join(", ", "abc", "def", "ghi", "jkl");
@Annotation(str)
public void foo();
但是出现错误element value must be a constant expression
。我知道该表达式不适合Java对常量表达式的定义,但是,有什么方法可以向编译器断言str
是常量吗?如果我能以上述方式编写代码,则代码将更易于阅读和维护(实际列表在我的实际代码中要长得多)。
答案 0 :(得分:4)
否。
在语言规范中,常量表达式具有a precise definition,涉及方法调用的任何内容都不是常量表达式。
使它成为常量表达式的唯一方法是生成包含该方法结果的代码,对其进行编译,然后使用该方法中的常量值表达式。