我搞乱了一些模式,以使代码更加模块化。所以我有这样的东西:
class A implements ICallback {
MyObject o;
B b = new B(this, someParameter);
@Override
public void callback(MyObject o){
this.o = o;
}
}
class B {
ICallback ic;
B(ICallback ic, someParameter){
this.ic = ic;
}
new Thread(new Runnable(){
public void run(){
// some calculation
ic.callback(myObject)
}
}).start();
}
interface ICallback(){
public void callback(MyObject o);
}
我必须等待 A
中的 MyObject
,因此我使用 callback
来通知 A
如果B
中的Thread
的工作完成。但现在我必须将所有逻辑来处理 MyObject
并在 callback
中进行进一步处理。
我可以以某种方式避免这种情况吗?或者这是正确的方法吗?
最佳答案
你的方法基本上是合理的,但是A类
可能不应该实现ICallback
本身。更典型、更灵活的方案是将匿名回调实现的实例传递给 B
。
另请注意,回调的所有处理都将在 B
启动的线程上完成。
与上述观察相关的是您对 callback
执行 MyObject
的所有处理的疑虑的答案:基本上没有其他方法可以做到这一点,因为提供 MyObject
由 B
的线程启动,并且控制只能从该方法向外流动。如果您希望处理跳转到主线程,您将需要一个涉及阻塞队列的更复杂的方案。
关于java - 如何正确使用回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834729/