Java:我们如何在“禁止函数指针”时创建回调函数?
问题描述:
可能重复:
What's the nearest substitute for a function pointer in Java?
Callback functions in JavaJava:我们如何在“禁止函数指针”时创建回调函数?
我想问术语回调的一些概念。
使用回调的主要目的是什么?它只是为了做一些异步功能吗?从维基,我无法得到实际意义。
这部分代码是从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);
}
从维基复制,它说我们需要传递一个函数指针作为其他函数的参数为了做一个回调。
但是在java中,当我们调用一个函数时,没有办法通过引用传递,我们可以像Java代码那样在Java中创建一个回调函数吗?
感谢
答
到目前为止,Java已经使用的接口和(有时是匿名的)实现说的接口表现为回调。
对于简单的回调,您可以使用java.util.Runnable
或java.util.concurrent.Callable
而不是定义自己的接口。
即将推出的Java版本将为优雅的回调添加更好的支持,请参阅this。
答
您只能使用一种方法创建一个匿名类实例实现接口,例如, Callable:
Callable<Integer> function = new Callable<Integer>() {
Integer call() {
return ...;
}
}
然后在使用回调的代码只是把它这样的:
int result = function.call();
答
函数指针是你用什么,如果你没有一个面向对象的语言。 C++从C继承了它们。相反,请看一下Strategy设计模式。
答
不是真的可以传递的仅仅是对象的引用,但与右侧接口...
return new CallBack(){
public void call(){
//...
}
}
仿制药RET价值和args将是一个不错的扩展
类似:HTTP:// *.com/questions/443708/callback-functions-in-java http://*.com/questions/122407/whats-the-nearest-substitute-for-a-function-pointer-in-java –
什么是使用回调的主要目的是什么? [好莱坞原则](http://en.wikipedia.org/wiki/Hollywood_Principle)是一个很好的比喻! – home