在一个列表中存储不同类型的AsyncTasks

时间:2019-01-05 15:04:51

标签: java android generics

案例情况

假设我需要在同一列表中存储3个AsyncTasks,并且每个都有不同的一组通用类型。例如:

public class FirstAsyncTask extends AsyncTask<Void,Void,Void>()

public class SecondAsyncTask extends AsyncTask<String,Void,String>()

public class ThirdAsyncTask extends AsyncTask<Integer,Void,List<Integer>>()

如何在保留通用类型的同时将AsyncTasks存储在一个列表中?

我尝试将它们保存在这样的非参数列表中:

List<AsyncTask<?,?,?>> asyncTasks = new ArrayList<>();

问题

此方法面临的问题是,当我从列表中获得AsyncTasks之一并尝试调用.execute()时,会抛出ClassCastException,这是日志中的异常:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[]

(我正在使用此行来获取并执行任务)

asyncTasks.get(someIndex).execute();

现在,我理解,为什么会发生这种情况(因为这三个任务之间最常见的类型是Object),但我无法提出解决此问题的想法。我要问的问题的可能答案是 '是' ,但是有没有解决的办法?

0 个答案:

没有答案