假设我需要在同一列表中存储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
),但我无法提出解决此问题的想法。我要问的问题的可能答案是 '是' ,但是有没有解决的办法?