JavaScript回调的Java等价物是什么?

JavaScript回调的Java等价物是什么?,java,javascript,Java,Javascript,我对JavaScript很有经验,但对Java不熟悉。我试图找出如何将一个函数作为另一个函数的参数传递。在JavaScript中,这类似于图1中的块 图1 function fetchData(url, callback) { // Do ajax request and fetch data from possibly slow server // When the request is done, call the callback function callba

我对JavaScript很有经验,但对Java不熟悉。我试图找出如何将一个函数作为另一个函数的参数传递。在JavaScript中,这类似于图1中的块

图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中有类似的方法吗?我已经搜索了Internet,但没有发现对新手有什么帮助。

不幸的是,唯一的等价物(我知道是否)是定义一个接口,您的
fetchData
方法将其作为参数接受,并使用该接口实例化一个匿名内部类。或者,调用
fetchData
方法的类可以实现该接口本身,并使用
this
将自己的引用传递给方法

这是您接受“回调”的方法:

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);

在Java 8之前,只有使用接口才能实现这一点。解决这一问题的模式是否不同?发送一个包含
回调
方法的接口
MyInterface-MyInterface
,而不是
回调(ajaxResponse)
do
myInterface.callback(ajaxResponse)。有关如何在Java中实现这一点的更广泛解释,请参见。@LuiggiMendoza Little nit,即使使用Java 8,也只能使用接口。Java8提供的是,在调用站点创建实现接口的匿名类更容易。对于使用回调的函数(例如上面的
fetchData
),Java 8中没有任何更改。是的,这在可能的重复Q/A中有所涉及。@luigimendoza是的,我在发布答案之前没有注意到这一点。我的错。
fetchData(targetUrl, this);