这是基本问题。我有一个A类,它给B类提供了一些任务。当B类完成了它的尝试时,它必须通知A类。我希望在B类中注册一个类方法作为回调。
我真的想用这种方式做,而不是用Observable接口的观察者模式。
public class A
{
public void A()
{
B b = new B()
b.registerCallback(callback);
}
private void callback()
{
}
}
public class B
{
private ???? callbackoNotify;
public class registerCallback(??? callback)
{
callbackoNotify = callback;
}
public void notify()
{
callback();
}
}
答案 0 :(得分:2)
您也可以在没有回调的情况下执行此操作。这是一个例子:
A a = ...
B b = ...
假设b有一个像这样的doTask方法:
public void doTask(Runnable task);
A现在可以这样称呼它:
b.doTask(() -> {System.out.println("Hi There");});
但是,任务完成时不会通知A.你可以简单地改变这样的任务:
Runnable taskForB = () -> {System.out.println("Hi There");};
Runnable wrapperForTaskWithCallback = () -> {
taskForB.run();
taskWasFinished();
};
然后运行包装器任务:
b.doTask(wrapperForTaskWithCallback);
给A一个方法:
public void taskWasFinished();
答案 1 :(得分:1)
您可以为回调定义interface
。
interface Callback{
void call();
}
然后,让A类实现它。
class A implements Callback{
private B b;
public A(){
b = new B();
b.registerCallback(this);
}
// Implementation of the callback interface
public void call(){
}
}
然后,让B类处理回调。
public class B
{
private Callback callbackoNotify;
public class registerCallback(Callback callback)
{
callbackoNotify = callback;
}
public void notify()
{
callbackNotify.call();
}
}
但在上述情况中,callbackNotify
可以是 null 。因此,最好将构造函数中的回调传递给B。
希望你明白了。