2013-11-04 40 views
1

我對JavaScript有經驗,但是對於Java來說是新手。我想弄清楚如何傳遞一個函數作爲另一個函數的參數。在JavaScript本想圖1中的塊什麼是JavaScript回調的Java等價物?

圖1

function fetchData(url, callback) { 

    // Do ajax request and fetch data from possibly slow server 

    // When the request is done, call the callback function 
    callback(ajaxResponse); 

} 

有沒有在Java中這樣做的一個類似的方式?我已經搜索了互聯網,但發現很少有幫助新手級別。

+0

在Java 8之前,只能使用接口。 –

+0

那麼爲了解決這個問題,可能有不同的模式嗎? –

+0

發送一個包含'callback'方法的接口'MyInterface myInterface',而不是'callback(ajaxResponse);'do' myInterface.callback(ajaxResponse);'。 –

回答

2

不幸的是,唯一的等價物(我知道如果)定義了一個接口,您的fetchData方法將接受這個接口作爲參數,並使用該接口實例化一個匿名內部類。或者,調用fetchData方法的類可以實現該接口本身,並使用this將其自己的引用傳遞給方法。

這是你的方法,該方法接受一個 「回調」:

public void fetchData(String url, AjaxCompleteHandler callback){ 
    // do stuff... 
    callback.handleAction(someData); 
} 

AjaxCompleteHandler

public interface AjaxCompleteHandler{ 
    public void handleAction(String someData); 
} 

匿名內部類的定義:

fetchData(targetUrl, new AjaxCompleteHandler(){ 
    public void handleAction(String someData){ 
     // do something with data 
    } 
}); 

或者,如果你的類實現MyCoolInterface,你可以簡單地這樣稱呼它:

fetchData(targetUrl, this); 
+1

是的,這在可能的重複Q/A中有所涵蓋。 –

+0

@LuiggiMendoza是的,我沒有注意到,直到我發佈了答案。我的錯。 –

相關問題