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为其他类,即使ObjectArrayList的实例,您也不知道它是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。 你不能把它投射到你的类型