フィールド変数の監視は、こちらのオブザーバー・パターンでもやりました。
PropertyChangeListenerを使って、フィールド変数を監視するサンプル
PropertyChangeListenerを使って、フィールド変数を監視します。
 フィールド変数の値が変わったら、変更前後の値を出力します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class PropertyChangeTest {     private PropertyChangeSupport pcs = new PropertyChangeSupport(this);     private String value = null;     public String getValue() {         return value;     }     public void setValue(String value) {         String oldValue = this.value;         this.value = value;         //値をセットした時に、イベントを発火する         pcs.firePropertyChange("value", oldValue, value);     }     public void addPropertyChangeListener(PropertyChangeListener listener) {         pcs.addPropertyChangeListener(listener);     }     public void removePropertyChangeListener(PropertyChangeListener listener) {         pcs.removePropertyChangeListener(listener);     }     public static void main(String[] args) {         PropertyChangeTest obj = new PropertyChangeTest();         //リスナーをセット         obj.addPropertyChangeListener(evt -> {             System.out.println("-- 変わったよー --");             System.out.println("変数: " + evt.getPropertyName());             System.out.println("変更前: " + evt.getOldValue());             System.out.println("変更後: " + evt.getNewValue());         });         //フィールド変数の値を変更         obj.setValue("a");         obj.setValue("b");         obj.setValue("b");    //この分は通知されない     } } | 
実行結果
フィールド変数が変更されたときに、変更前後の値が出力されます。
| 1 2 3 4 5 6 7 8 | -- 変わったよー -- 変数: value 変更前: null 変更後: a -- 変わったよー -- 変数: value 変更前: a 変更後: b | 
サンプルの解説
PropertyChangeSupportとPropertyChangeListenerを使うことで、フィールド変数の通知が簡単にできます。
 ただし、変更の通知は、最初に”a”をセットしたときと、その次の”b”をセットした時です。
 最後にもう一度”b”をセットした分については、通知されません。















