2011-09-29 65 views
1

可能重複:
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:// stackoverflow.com/questions/443708/callback-functions-in-java http://stackoverflow.com/questions/122407/whats-the-nearest-substitute-for-a-function-pointer-in-java –

+1

什麼是使用回調的主要目的是什麼? [好萊塢原則](http://en.wikipedia.org/wiki/Hollywood_Principle)是一個很好的比喻! – home

回答

3

到目前爲止,Java已經使用的接口和(有時是匿名的)實現說的接口表現爲回調。

對於簡單的回調,您可以使用java.util.Runnablejava.util.concurrent.Callable而不是定義自己的接口。

即將推出的Java版本將爲優雅的回調添加更好的支持,請參閱this

0

您只能使用一種方法創建一個匿名類實例實現接口,例如, Callable

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

然後在使用回調的代碼只是把它這樣的:

int result = function.call(); 
0

函數指針是你用什麼,如果你沒有一個面向對象的語言。 C++從C繼承了它們。相反,請看一下Strategy設計模式。

0

不是真的可以傳遞的僅僅是對象的引用,但與右側接口...

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

仿製藥RET價值和args將是一個不錯的擴展