3

我有一个具有一个可执行 JAR 的应用程序,它使用其他 JAR 库。当我更新一个库 JAR 时,用户关闭他们的程序并再次打开它,并使用新的 JARS。但是,我有一个只包含一个类的 JAR,它只包含字段。当这个 JAR 被自己替换时,旧 JAR 的字段中的值似乎在程序中使用。

此时旧的 JAR 从文件系统中消失了,所以我对这些值的来源有点困惑。我当前的解决方案是更新另一个使用有问题的 JAR 的 JAR,但我不确定为什么会这样,所以我正在寻找任何可用的见解。

4

2 回答 2

4

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”。解决方案是还重新编译和更新使用常量的代码。

另请参阅是否所有编译时常量都内联?

于 2013-02-22T21:06:40.510 回答
0

这些静态字段的值可能会在程序关闭后保存在 RAM 中。如果您重命名包含这些字段的包或类,我敢打赌,当您修改值并重新启动时,它会起作用。这不是一个好的解决方案,只是稍微确认一下这些值正在被缓存。我建议你不要有一个只有字段值的类。如果您想将这些值与代码的其余部分分开,那么如果这些字段很容易表示为字符串,则可以使用属性文件。您也可以将它们设为其他类中的字段。

于 2013-02-22T21:11:24.453 回答