更改 doInBackground 中的通用返回类型
Posted
技术标签:
【中文标题】更改 doInBackground 中的通用返回类型【英文标题】:Change the generic return type in doInBackground 【发布时间】:2021-07-01 12:15:27 【问题描述】:下午好,我有一个完美运行的通用 baseAsyncTask,java 可以在 doInBackground 中定义类型,但是在 onPostExecute 我调用我的函数 doAsync,它组装为 Object,就像我在创建 Override 来定义类型时一样,所以我不要投射
类 DaoProcessorAsync
public abstract class DaoAsyncProcessor<T>
public interface DaoProcessCallback<T>
void onResult(T result);
private final DaoProcessCallback daoProcessCallback;
public DaoAsyncProcessor(DaoProcessCallback daoProcessCallback)
this.daoProcessCallback = daoProcessCallback;
protected abstract T doAsync();
public void start()
new DaoProcessAsyncTask().execute();
private class DaoProcessAsyncTask extends AsyncTask<Void, Void, T>
@Override
protected T doInBackground(Void... params)
return doAsync();
@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(T t)
if(daoProcessCallback != null)
daoProcessCallback.onResult(t);
调用类
new DaoAsyncProcessor<Trabalhador>(new DaoAsyncProcessor.DaoProcessCallback()
@Override
// How to make it explicit that the return is of the Worker type
public void onResult(Object result)
**at that point it returns object to me, and I need to do conversion**
Trabalhador trabalhador = (Trabalhador) result;
)
@Override
protected Trabalhador doAsync()
**This worker-type return should be explicit in OnRESULT, but I can't define it**
return trabalhadorDao.lerPorCPF(123);
.start();
【问题讨论】:
【参考方案1】:我认为您在创建 DaoProcessCallback 时缺少类型。
试试
new DaoAsyncProcessor<Tabalhador>.DaoProcessCallback()
【讨论】:
以上是关于更改 doInBackground 中的通用返回类型的主要内容,如果未能解决你的问题,请参考以下文章
在扩展 AsyncTask 的类中使用 DoInBackground 方法更改非 MainActivity 的 Activity 中 TextView 的文本
AsyncTask:doInBackground() 的返回值去哪了?
如何从我的 doInBackground 任务中获取返回值?
AsyncTask doInBackground 返回数组列表