way*_*way 8 java interface callback
我有一个名为A的类,它的组件类叫做B.
public class A {
B myB;
...
public void bWasUpdated(){
...
List<String> list = myB.connections;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我的A类中有B的实例,并且如果B的实例以某种方式更新,那么如何通知我的A类实例并调用bWasUpdated()?
我试过接口但最终真的很困惑.我想我不太明白如何在对象及其组件之间传递数据.
编辑
public class B {
ArrayList<String> connections;
....
public void listen(){
...
if(foundNewConnection){
this.connections.add(theNewConnection);
//Notify class A about this new connection;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fly*_*mba 12
您应该使用一个Listener,它是一种称为Observer模式的模式.
首先,将此接口添加到B类:
public interface ChangeListener {
public void onChangeHappened();
}
Run Code Online (Sandbox Code Playgroud)
其次,使用setter将侦听器变量添加到B:
private ChangeListener listener;
public void setChangeListener(ChangeListener listener) {
this.listener = listener;
}
Run Code Online (Sandbox Code Playgroud)
第三,使A实现ChangeListener接口并将其自身注册为侦听器:
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.
}
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,当事情发生变化时,请在B内部召唤听众:
public void someMethodInB() {
// change happened
if (listener != null) {
listener.onChangeHappened();
}
}
Run Code Online (Sandbox Code Playgroud)