私のコードでは、特定の静的変数の変更がいつ値になるかを知る必要があります。Java ではインスタンス変数のリスナーとして自分自身を登録できることはわかっていますが、静的 (クラス) 変数では登録できません。この問題の回避策はありますか? ありがとう
1891 次
2 に答える
3
静的変数へのアクセス方法によって異なります。静的セッター メソッドを使用して変数を変更し、変数を非公開にすると、簡単です。
public class Foo {
private static int bar = 0;
private static PropertyChangeSupport propertyChangeSupport =
new PropertyChangeSupport(Foo.class);
public static void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public static void setBar(int bar) {
int oldVal = Foo.bar;
Foo.bar = bar;
propertyChangeSupport.firePropertyChange("bar", oldVal, Foo.bar);
}
}
もちろん、複数のスレッドが値を設定したい場合に備えて、setBar を同期メソッドにしたい場合があります。おそらく、他の誰かが値を再度変更できるようになる前に、すべてのリスナーに通知する必要がありますが、それは要件によって異なります。
于 2012-08-22T00:48:25.153 に答える
1
いつでも静的変数を静的アクセサーでラップし、それらのアクセサーにコードを追加できます。
于 2012-08-21T21:55:01.677 に答える