我有一个名为A的类,其组件类为B。

public class A {
    B myB;

    ...
    public void bWasUpdated(){
       ...
        List<String> list = myB.connections;
    }
}

如果我在类A中有一个B的实例,并且如果该B的实例以某种方式得到更新,那么如何通知我的类A的实例并调用bWasUpdated()呢?

我尝试了接口(interface),但最终感到非常困惑。我想我还不太了解如何在对象及其组件之间传递数据。

编辑
public class B {
    ArrayList<String> connections;

    ....

    public void listen(){

        ...
        if(foundNewConnection){
            this.connections.add(theNewConnection);
            //Notify class A about this new connection;
        }
    }
}

最佳答案

您应该使用监听器,这是称为Observer pattern的模式的一种形式。

首先,将此接口(interface)添加到您的B类中:

public interface ChangeListener {
    public void onChangeHappened();
}

其次,使用setter将监听器变量添加到B:
private ChangeListener listener;

public void setChangeListener(ChangeListener listener) {
    this.listener = listener;
}

第三,使A实现ChangeListener接口(interface)并将其自身注册为监听器:
public class A implements ChangeListener {

public A() {
    myB = new B();
    myB.setChangeListener(this);
}

...

public void onChangeHappened() {
    // do something with B now that you know it has changed.
}

最后但并非最不重要的一点是,当发生更改时,在B内调用您的监听器:
public void someMethodInB() {
    // change happened
    if (listener != null) {
        listener.onChangeHappened();
    }
}

关于java - 如何通知事件的类组件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35497236/

10-10 13:40
查看更多