java - 如何通知事件的类组件?

标签 java interface callback

我有一个名为 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;
        }
    }
}

最佳答案

您应该使用Listener,它是一种称为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/

相关文章:

java - 在 ShowcaseViews 按钮上启动新 Intent

java - java.util.logging.Logger 和 java.lang.System.Logger 之间的区别

ruby - 如何找到 "essential"方法来提供 Ruby mixins 的接口(interface)?

java - 在java 8中模拟私有(private)接口(interface)

javascript - 打印对象给出的值与打印该对象的属性不同

Python子进程: callback when cmd exits

Java - 这是使用类来编辑标签的不良做法吗?

javascript - 无法让 JQuery 回调函数工作

javascript - session 超时时无法在页面回调中调用 Response.Redirect?

java - Spark - MultiMap可以转换为JAVA中的DataFrame吗