Java简单回调

时间:2017-02-26 01:53:00

标签: java methods callback

这是基本问题。我有一个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();
    }
}

2 个答案:

答案 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。

希望你明白了。