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中创建一个回调函数吗?

感谢

+0

类似:HTTP:// *.com/questions/443708/callback-functions-in-java http://*.com/questions/122407/whats-the-nearest-substitute-for-a-function-pointer-in-java –

+1

什么是使用回调的主要目的是什么? [好莱坞原则](http://en.wikipedia.org/wiki/Hollywood_Principle)是一个很好的比喻! – home

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

对于简单的回调,您可以使用java.util.Runnablejava.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将是一个不错的扩展