我搞乱了一些模式,使代码更加模块化。所以我有这样的事情:
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
{1}}完成了。但是现在我必须把所有逻辑都用来处理MyObject
并进一步处理callback
。
我可以以某种方式避免这种情况,还是以正确的方式?
答案 0 :(得分:2)
您的方法基本上是合理的,但class A
本身可能不会实现ICallback
。更典型,更灵活的方案是将匿名回调实现的实例传递给B
。
另请注意,回调的所有处理都将在B
启动的线程上完成。
与上述观察相关的是您对callback
处理MyObject
的所有处理的疑虑的答案:由于提供MyObject
的行为,基本上没有其他办法可以做到这一点由B
的线程启动,控件只能从该方法向外流动。如果您希望处理跳转到主线程,则需要一个更复杂的方案来阻止队列。