更改 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 返回数组列表

Java中的通用方法-如何将参数类类型作为返回类型返回[重复]

AsyncTask doInBackground 仅有时返回空指针异常