在我的 Android 项目中,我创建了一个抽象的 AsyncTask 类,我在其中输入 URL 和如果需要的分页信息,这样我就不需要继续编写 HTTP 内容等。
我创建了一个抽象方法 onAsyncTaskResult(Object o) ,它必须在使用时实现。 但是,当将其转换为适当的对象(可以是不同类型)时,IDE 会给我一个警告
"Unchecked cast for java.lang.Object to java.util.ArrayList<com.company.package.subpackage.MyItem>"
这是我实现上述功能的代码 fragment
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());
关于Java 如何处理对象中的 Array<MyItem> 的 "Unchecked cast",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274441/