Java 在常量表达式中使用String.join

Java 在常量表达式中使用String.join,java,compile-time-constant,constant-expression,Java,Compile Time Constant,Constant Expression,我有一个非常长的字符串常量,用于注释,这个字符串本质上是一个逗号分隔的列表。我希望能够做到以下几点: String str = String.join(", ", "abc", "def", "ghi", "jkl"); @Annotation(str) public void foo(); 但是我得到的错误是元素值必须是一个常量表达式。我知道这个表达式不适合Java对常量表达式的定义,但是,有没有办法向编译器断言str是常量?如果我能以上述方式编写代码,那么代码更易于阅读和维护(实际列表在

我有一个非常长的
字符串
常量,用于注释,这个字符串本质上是一个逗号分隔的列表。我希望能够做到以下几点:

String str = String.join(", ", "abc", "def", "ghi", "jkl");

@Annotation(str)
public void foo();
但是我得到的错误是
元素值必须是一个常量表达式
。我知道这个表达式不适合Java对常量表达式的定义,但是,有没有办法向编译器断言
str
是常量?如果我能以上述方式编写代码,那么代码更易于阅读和维护(实际列表在我的实际代码中要长得多)。

常量表达式在语言规范中有定义,任何涉及方法调用的内容都不是常量表达式


使其成为常量表达式的唯一方法是生成包含该方法结果的代码,对其进行编译,然后使用其中的常量值表达式。

Darn。如果编译器能够对某些表达式进行特殊处理会很方便,但很可能有一个不可能的原因。@Samuelbar在这方面正在进行研究,请参阅和