可能重复:
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中创建一个回调函数吗?
由于
答案 0 :(得分:3)
到目前为止,Java已经使用所述接口的接口和(有时是匿名的)实现来表现为回调。
对于简单的回调,您可以使用java.util.Runnable
或java.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的泛型将是一个很好的扩展