我有一个具有一个可执行 JAR 的应用程序,它使用其他 JAR 库。当我更新一个库 JAR 时,用户关闭他们的程序并再次打开它,并使用新的 JARS。但是,我有一个只包含一个类的 JAR,它只包含字段。当这个 JAR 被自己替换时,旧 JAR 的字段中的值似乎在程序中使用。
此时旧的 JAR 从文件系统中消失了,所以我对这些值的来源有点困惑。我当前的解决方案是更新另一个使用有问题的 JAR 的 JAR,但我不确定为什么会这样,所以我正在寻找任何可用的见解。
java代码中的常量可以被编译器内联。例子:
public class A {
public static final String STR = "foo";
}
public class B {
public static void main(final String... args) {
System.out.println(A.STR);
}
}
如果将 STR 更改为“bar”并重新编译 A,B 在运行时仍会打印“foo”。解决方案是还重新编译和更新使用常量的代码。
另请参阅是否所有编译时常量都内联?
这些静态字段的值可能会在程序关闭后保存在 RAM 中。如果您重命名包含这些字段的包或类,我敢打赌,当您修改值并重新启动时,它会起作用。这不是一个好的解决方案,只是稍微确认一下这些值正在被缓存。我建议你不要有一个只有字段值的类。如果您想将这些值与代码的其余部分分开,那么如果这些字段很容易表示为字符串,则可以使用属性文件。您也可以将它们设为其他类中的字段。