最终静态字符串编译问题.如何避免的任何建议



我有一种情况,我有几个文件具有最终的静态字符串变量(常量)。现在,这些变量被用于许多使用classname.variable的文件中。这些文件存在于不同的jar中。第一个jar包含常量,第二个jar将包含使用常量的文件。据了解,当使用常量的文件进行java编译时,classname.variable将在编译过程中被常量本身替换。

现在,假设我更改了一个常量的值并构建了第一个jar,那么应用程序中就不会有任何编译问题或运行时问题。但在第二个jar中,类文件中将存在上一个常量。我该如何避免这种情况?请提供建议。我正在用ANT制作罐子。

值复制行为仅适用于编译时常量。如果变量被声明为final,并且是用编译时常数初始化的,那么它就是编译时常数。因此,您可以通过不初始化变量来强制变量为非编译时常数:

public static final String CONSTANT_BUT_NOT_COMPILE_TIME_CONSTANT;
static {
    CONSTANT_BUT_NOT_COMPILE_TIME_CONSTANT = "the value being constant at runtime";
}

这里,变量不是用常数值初始化的,而是在声明之后分配。因此,它不是编译时常数,因此,它的值在编译时从未被复制。它在运行时仍然是不可变的。

只需移除最后一个修饰符。或者一定要重建第二个罐子。

相关内容

  • 没有找到相关文章

最新更新