我搞砸了一些模式,使代码更具模块化。所以我有这样的事情:

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,所以如果callbackA的工作已完成,我将使用Thread通知B。但是现在我必须将所有逻辑处理MyObject并在callback中进行进一步处理。

我能以某种方式避免这种情况吗?

最佳答案

您的方法基本上是正确的,但是class A可能不应该实现ICallback本身。更典型,更灵活的方案是将匿名回调实现的实例传递到B

还要注意,回调的所有处理都将在B启动的线程上完成。

与上述观察结果相关的是您对callback进行所有MyObject处理的疑虑的答案:基本上没有其他方法可以这样做,因为提供MyObject的动作是由B的线程发起的控件只能从该方法向外流动。如果您希望处理跳转到主线程,则需要一个涉及阻塞队列的更复杂的方案。

09-10 08:33
查看更多