3

他の JAR のライブラリを使用する 1 つの実行可能 JAR を持つアプリケーションがあります。ライブラリ JAR を更新すると、ユーザーがプログラムを閉じて再度開くと、新しい JARS が使用されます。ただし、フィールドのみを含むクラスを 1 つだけ含む JAR が 1 つあります。この 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 に答える