我有一种情况,我有几个文件具有最终的静态字符串变量(常量)。现在,这些变量被用于许多使用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";
}
这里,变量不是用常数值初始化的,而是在声明之后分配。因此,它不是编译时常数,因此,它的值在编译时从未被复制。它在运行时仍然是不可变的。
只需移除最后一个修饰符。或者一定要重建第二个罐子。