Java回调函数作为参数

标签 java callback inline

我想做一些简单的事情,但我无法在谷歌搜索中表达它。所以我就来了^^

我有一个像这样的异步任务:

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

但是,除了使用“内联”函数作为回调之外,是否可以做这样的事情:(如果是,怎么做?)

class Program {

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

    public static void Main(){

         DoAsyncRequest("http://toto.com", MyCallBack);
    }

    private void MyCallBack(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
}

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

关于Java回调函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798511/

相关文章:

java - 了解 secure/httponly cookie 如何为 java 应用程序工作

java - Swing 表单编辑器

java - 如何在具有抽屉式导航和 Web View 的应用程序中启用返回上一页

javascript - return 是否隐式添加到回调函数中?

python - 用 ctypes 替换共享库中的函数指针

search - 高效的在线搜索和替换大文件

Html:调整页面大小时图像将换行

java - 如何根据值在android中选择json对象

Jquery 清除内联 css

java - Java 中 Promise 的概念