我搞砸了一些模式,使代码更具模块化。所以我有这样的事情:
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);
}
我必须等待
MyObject
中的A
,所以如果callback
中A
的工作已完成,我将使用Thread
通知B
。但是现在我必须将所有逻辑处理MyObject
并在callback
中进行进一步处理。我能以某种方式避免这种情况吗?
最佳答案
您的方法基本上是正确的,但是class A
可能不应该实现ICallback
本身。更典型,更灵活的方案是将匿名回调实现的实例传递到B
。
还要注意,回调的所有处理都将在B
启动的线程上完成。
与上述观察结果相关的是您对callback
进行所有MyObject
处理的疑虑的答案:基本上没有其他方法可以这样做,因为提供MyObject
的动作是由B
的线程发起的控件只能从该方法向外流动。如果您希望处理跳转到主线程,则需要一个涉及阻塞队列的更复杂的方案。