フィールド変数の監視は、こちらのオブザーバー・パターンでもやりました。
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”をセットした分については、通知されません。