0

私のコードでは、特定の静的変数の変更がいつ値になるかを知る必要があります。Java ではインスタンス変数のリスナーとして自分自身を登録できることはわかっていますが、静的 (クラス) 変数では登録できません。この問題の回避策はありますか? ありがとう

4

2 に答える 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 に答える