2

周期的なプロパティ変更リスナーをセットアップしました。クラス A の 2 つのオブジェクトがあります。1 つのオブジェクトが他のオブジェクトの変更をリッスンするようにしました。コードは次のとおりです。

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CyclicPCLTest {

    public static class A implements PropertyChangeListener{
       private PropertyChangeSupport propertyChangeSupport;
       private String date;

        public A(String date) {
            this.date = date;
            propertyChangeSupport=new PropertyChangeSupport(this);
        }

        public String getDate() {
           return date;
       }

       public void setDate(String date) {
           String oldDate=this.date;
           this.date = date;
           propertyChangeSupport.firePropertyChange(new PropertyChangeEvent(this, "date", oldDate, this.date));
       }

        public void addPropertyChangeListener(PropertyChangeListener listener){
            propertyChangeSupport.addPropertyChangeListener(listener);
        }

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            setDate ((String) evt.getNewValue());
        }
    }


    public static void main(String[] args) {
        List<A> as= Arrays.asList(new A[]{new A("01/02/2011"), new A("01/02/2011")});
        as.get(0).addPropertyChangeListener(as.get(1));
        as.get(1).addPropertyChangeListener(as.get(0));

        as.get(0).setDate("02/02/2011");
        System.out.println("date of the other A "+as.get(1).getDate());

        as.get(1).setDate("03/02/2011");
        System.out.println("date of the other A "+as.get(0).getDate());
    }
}

コードは機能し、これが出力です。

date of the other A 02/02/2011
date of the other A 03/02/2011

私はそれがどのように行うのだろうか?それは私にスタックオーバーフローエラーを与えるべきではありませんか? 最初の A が更新されると、2 番目の A に通知し、次に 2 番目の A が更新され、最初の A に通知します。これは永遠に続くはずです。

4

1 に答える 1