Java动态定义对象

Java动态定义对象,java,android,object,android-asynctask,Java,Android,Object,Android Asynctask,所以我有一个关于我最近遇到的事情的一般性问题。假设我有两门课,活动和任务。在Activity中,一个新的Task对象被实例化,但不是给它通常的参数,而是在后面的括号中引入一些新代码,并在实例化时调用它的一个方法。我见过对象一创建就调用方法,但也没有重新定义其行为。这都是基于Android的,所以可能与之相关,但这种语法上的怪异似乎更像是Java概念,而不是Android引入的东西。下面是类文件: class Task extends AsyncTask<String, Void, Stri

所以我有一个关于我最近遇到的事情的一般性问题。假设我有两门课,活动和任务。在Activity中,一个新的Task对象被实例化,但不是给它通常的参数,而是在后面的括号中引入一些新代码,并在实例化时调用它的一个方法。我见过对象一创建就调用方法,但也没有重新定义其行为。这都是基于Android的,所以可能与之相关,但这种语法上的怪异似乎更像是Java概念,而不是Android引入的东西。下面是类文件:

class Task extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... args) {

        try {
        //do things here
        } catch (Exception ex) {
        ex.printStackTrace();
        Log.e("Exception", ex.toString());
        }

        return Text;
    }

}

我知道AsyncTask是一个奇怪的类,因为它在一个单独的线程中将结果从doInBackground方法传递到onPostExecute方法,也许这就是为什么要这样做的原因,但我真的不明白为什么不在Tasks自己的类文件中定义onPostExecute,就像我在其他示例中看到的那样。而且,这个东西编译和运行都非常好,做了它应该做的一切。我只是不太明白背后的原因。希望这里有人能帮忙!谢谢

这是一款Java语法糖,叫做an。

我不是Android开发人员,所以我不完全熟悉其中的任何特性,但是,只要您需要确保响应操作在单独的线程中发生以避免死锁等,或者当
onPostExecute
操作在
任务中不可见的对象时,就会使用此模式。这可以作为范围内任何
final
对象的一种覆盖

new Task() {
                    @Override
                    public void onPostExecute(String result) {
                        Log.d("JSON", result);
                        try {
                            if (jObject.has("error")) {
                                //Do something here
                            }
                            else if (!paymentCheck(appDomain)){
                                //do something else
                            }
                            else {
                                //Do last thing
                            }
                        } catch (JSONException e) {
                            throw new RuntimeException(e);
                        }
                    }
                }.execute(appDomain, email, password);