所以我对我最近遇到的事情有一个一般性的问题。让我们说我有2个课程,活动和任务。在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;
}
}
这是要创建的对象,然后实例化它的代码在这里:
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);
我理解AsyncTask是一个古怪的类,因为它将doInBackground方法的结果传递给另一个线程中的onPostExecute,也许这就是为什么这样做了,但我真的不明白为什么你不会只需在Tasks自己的类文件中定义onPostExecute,就像我在其他示例中看到的那样。此外,这个东西编译和运行完美,做了它应该做的一切。我真的不明白背后的推理。希望有人在这里可以提供帮助!感谢
答案 0 :(得分:2)
这是一种名为anonymous class的Java语法糖。
答案 1 :(得分:0)
我不是Android开发人员所以我并不完全熟悉那里的任何特性,但只要你需要确保响应动作发生在一个单独的线程中以避免死锁等,就会使用此模式或{/ 1>当onPostExecute
操纵Task
中不可见的对象时。这可以作为范围内任何final
个对象的closure。