在我的Android项目中,我创建了一个抽象的AsyncTask类,我在其中输入了URL,如果需要,还可以分页信息,因此我不需要继续编写HTTP内容等.
我已经创建了一个抽象方法onAsyncTaskResult(Object o),它必须在使用时实现.
但是,当将其转换为适当的对象(可以是不同类型)时,IDE会向我发出警告
“未经检查的java.lang.Object强制转换为java.util.ArrayList< com.company.package.subpackage.MyItem>”
这是我执行所述函数的代码片段
new SuperCoolAsyncTask() {
@Override
protected void onAsyncTaskResult(Object o) {
if(o instanceof ArrayList) {
//generates warning in the following line
AppConstants.scoreStatistics = (ArrayList<MyItem>)o;
}
}
}.execute(get_url_score_statistics());
我该如何将它转换为ArrayList< MyItem>没有产生警告?
没有< MyItem>声明它会抛出“未选中的作业”
解决方法:
没有警告就不能这样做.您正在将Object转换为其他类,即使Object是ArrayList的实例,您也不知道它是泛型类型.
更新:
如果您自己编写SuperCoolAsyncTask,则可以使用泛型对类进行参数化:
public abstract class SuperCoolAsyncTask<ResultType> {
protected abstract void onAsyncTaskResult(ResultType o);
}
然后,当您调用代码时:
new SuperCoolAsyncTask<ArrayList<MyItem>>() {
@Override
protected void onAsyncTaskResult(ArrayList<MyItem> o) {
AppConstants.scoreStatistics = o;
}
}.execute(get_url_score_statistics());