我的情况是我的文件很少有最终的静态字符串变量(常量)。现在使用classname.variable在许多文件中使用这些变量。这些文件存在于不同的罐子中。第一个jar包含常量,第二个jar包含使用常量的文件。据了解,当对使用常量的文件进行java编译时,在编译期间classname.variable将被常量本身替换。
现在,假设我更改了常量的值并构建了第一个jar,应用程序中不会出现任何编译问题和运行时问题。但是在第二个jar中,前一个常量将出现在类文件中。我该如何避免这种情况?请提供建议。我正在用ANT建造罐子。
答案 0 :(得分:2)
值复制行为仅适用于编译时常量。如果变量是使用编译时常量初始化的final
和,则变量是编译时常量。因此,您可以通过不初始化变量来强制变量为无编译时常量:
public static final String CONSTANT_BUT_NOT_COMPILE_TIME_CONSTANT;
static {
CONSTANT_BUT_NOT_COMPILE_TIME_CONSTANT = "the value being constant at runtime";
}
此处,变量不是已初始化且具有常量值,但在声明后已分配。因此,它不是编译时常量,因此,它的值永远不会在编译时复制。它在运行时仍然是不可变的。
答案 1 :(得分:0)
只需删除最终修饰符即可。 或者确保重建第二个罐子。