【问题标题】:Create an abstract class that extends AsyncTask创建一个扩展 AsyncTask 的抽象类
【发布时间】:2016-02-04 22:16:43
【问题描述】:

我想创建一个扩展 AsyncTask 的中间抽象类,以便在密切相关的类之间共享代码。真正的具体类会扩展中间抽象类来定义细节。

对于 AsyncTask,我需要指定参数、进度和结果。但是,在中间层,我没有任何实现细节。那么具体类的详细定义应该怎么做呢?

//实现共享代码的中间层

public class SiteAsyncTask extends AsyncTask<?, ?, ?>{

//混凝土层

public class GetSiteAsyncTask extends SiteAsyncTask<Void, Void, Site> {

public class ListSiteAsyncTask extends SiteAsyncTask<Void, Void, ArrayList<Site> {

//在中间抽象层,如何将参数、进度和结果定义为通用的。结果可以是 Site 或 Site 的 Arraylist

public class SiteAsyncTask extends AsyncTask<?, ?, ?>{

//在中间层,如何定义doInBackground以使其通用。它可以是 Site 或 Site 的 ArrayList

protected Site doInBackground(Void... params) {

谢谢

【问题讨论】:

  • "Site or Arraylist of Site" 是不可能的,因为它们具有不同的对象层次结构

标签: java android android-asynctask


【解决方案1】:

当使用泛型扩展类时,您只需在子类中重新定义泛型并将它们重新应用到父类的定义中。

如果你想要所有参数,

public class SiteAsyncTask<Input, Progress, Result> extends AsyncTask<Input, Progress, Result>{}

如果你只关心结果,

public class SiteAsyncTask<Result> extends AsyncTask<Void, Void, Result>{}

如果你什么都不在乎,

public class SiteAsyncTask extends AsyncTask<Void, Void, Void>{}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多