Java回调函数作为参数

Java回调函数作为参数,java,callback,inline,Java,Callback,Inline,我想做一些简单的事情,但我不能在谷歌搜索中表达出来。所以,我来到这里^^ 我有一个异步任务,如下所示: class RequestTask extends AsyncTask<String, String, String> { final MyCallbackInterface callback; RequestTask(MyCallbackInterface callback) { this.callback = callback; }

我想做一些简单的事情,但我不能在谷歌搜索中表达出来。所以,我来到这里^^

我有一个异步任务,如下所示:

class RequestTask extends AsyncTask<String, String, String> {

    final MyCallbackInterface callback;

    RequestTask(MyCallbackInterface callback) {
        this.callback = callback;
    }

    @Override
    protected String doInBackground(String... uri) {
        ...
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        callback.onTaskFinished(result);
    }
}

interface MyCallbackInterface {
    void onTaskFinished(String result);
}
class Program {

    public void DoAsyncRequest(String stringUrl, MyCallbackInterface callback) {
        new RequestTask(callback).execute(stringUrl);
    }

    public static void Main(){

        DoAsyncRequest("http://toto.com", new MyCallbackInterface() {

            @Override
            public void onDownloadFinished(String result) {
                //do something ...
            }
        });
    }
}
但是,不使用“内联”函数作为回调函数,是否可以这样做:(如果是,如何做?)

谢谢

创建一个静态类:

private static class MyCallback implements MyCallbackInterface  {

        @Override
        public void onDownloadFinished(String result) {
            //do something ...
        }
}
然后使用

DoAsyncRequest("http://toto.com", new MyCallBack());
你做不到

private void MyCallBack(string result){
    //do something
}

因为回调应该是对象类型而不是方法。此外,它不是内联方法,而是我们调用的匿名类,它与上面定义的类非常相似,只是它没有任何名称,但您通过重写来实现该方法。

您可以将回调方法创建为静态,然后使用反射来调用它。但在该解决方案中,您遗漏的主要内容是类型安全性;然后,您可以将任务完成时要调用的类传递为MyClass.class

private void MyCallBack(string result){
    //do something
}