Java:当“禁止使用函数指针”时,我们如何创建回调函数?

时间:2011-09-29 16:15:01

标签: java asynchronous callback

  

可能重复:
  What's the nearest substitute for a function pointer in Java?
  Callback functions in Java

我想问一下回调一词的概念。

使用回调的主要目的是什么?它只是为了做一些异步功能吗?从维基,我无法得到实际意味着什么。

此部分代码是从wiki- callback

复制的
    void PrintTwoNumbers(int (*numberSource)(void)) {
        printf("%d and %d\n", numberSource(), numberSource());
    }

    /* One possible callback. */
    int overNineThousand(void) {
        return (rand() % 1000) + 9000;
    }

    /* Here we call PrintTwoNumbers() with three different callbacks. */
    int main(void) {
        PrintTwoNumbers(overNineThousand);
}
来自wiki的

表示我们需要将函数指针作为参数传递给其他函数才能进行回调。

但是在java中,当我们调用一个函数时,没有办法传递引用,我们可以像上面的代码一样在Java中创建一个回调函数吗?

由于

4 个答案:

答案 0 :(得分:3)

到目前为止,Java已经使用所述接口的接口和(有时是匿名的)实现来表现为回调。

对于简单的回调,您可以使用java.util.Runnablejava.util.concurrent.Callable,而不是定义自己的界面。

即将推出的Java版本将为优雅的回调添加更好的支持,请参阅this

答案 1 :(得分:0)

您可以使用一个方法创建一个匿名类实例实现接口,例如Callable

Callable<Integer> function = new Callable<Integer>() {
  Integer call() {
    return ...;
  }
}

然后在使用回调的代码中,只需调用它:

int result = function.call();

答案 2 :(得分:0)

如果您没有OO语言,则使用函数指针。 C ++从C继承它们。相反,请看一下策略设计模式。

答案 3 :(得分:0)

不是唯一可以传递的是对象引用,但使用正确的接口......

return new CallBack(){
public void call(){
   //...
}
}

返回值和args的泛型将是一个很好的扩展