Java如何处理来自Object的Array 的“Unchecked cast”
在我的Android项目中,我创建了一个抽象的AsyncTask类,我在其中输入了URL,如果需要,还可以分页信息,因此我不需要继续编写HTTP内容等。
我已经创建了一个抽象方法onAsyncTaskResult(Object o),它必须在使用时实现。 但是,当将其转换为适当的对象(可以是不同类型)时,IDE会向我发出警告
"Unchecked cast for java.lang.Object to java.util.ArrayList"
这是我执行所述函数的代码片段
new SuperCoolAsyncTask() { @Override protected void onAsyncTaskResult(Object o) { if(o instanceof ArrayList) { //generates warning in the following line AppConstants.scoreStatistics = (ArrayList)o; } } }.execute(get_url_score_statistics());
我该如何将其转换为ArrayList
而不生成警告?
如果没有声明,它会抛出“未选中的作业”
没有警告就不能这样做。 您正在将Object
为其他类,即使Object
是ArrayList
的实例,您也不知道它是generics类型。
更新:
如果您自己编写SuperCoolAsyncTask
,可以使用generics对类进行参数化:
public abstract class SuperCoolAsyncTask { protected abstract void onAsyncTaskResult(ResultType o); }
然后,当您调用代码时:
new SuperCoolAsyncTask>() { @Override protected void onAsyncTaskResult(ArrayList o) { AppConstants.scoreStatistics = o; } }.execute(get_url_score_statistics());
您无法避免警告,但可以使用@SuppressWarnings
注释隐藏它。 尝试这个:
new SuperCoolAsyncTask() { @Override @SuppressWarnings("unchecked") protected void onAsyncTaskResult(Object o) { if(o instanceof ArrayList) { //generates warning in the following line AppConstants.scoreStatistics = (ArrayList)o; } } }.execute(get_url_score_statistics());
如果你真的担心类型安全,另一个选择是保留generics未指定(即只转换为ArrayList,而不是ArrayList,然后在删除它时转换每个元素。
您可以将对象转换为ArrayList。 你不能把它投射到你的类型
- 即使我正在调用thread.interrupt(),线程也不会中断
- 快速滚动使用UniversalImageloader或使用Views的引用优化ListView
- 最新的Google搜索更新后,RecognizerIntent会出错
- Gradle Build失败并出现exception:java.exe’以非零退出值2结束
- Android使用dependency injection简单的自定义类
- 将数据插入SQLite数据库,数据类型不匹配
- 包含多个对象的ArrayList的序列化,不保存对象状态
- 在Android中使用SQLite和ContentProvider设置_ID字段
- 如何在listview文件浏览器中删除条目和video文件?