Java 如何处理对象中的 Array<MyItem> 的 "Unchecked cast"

标签 java android casting arraylist warnings

在我的 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 转换为其他类,即使 ObjectArrayList 的实例,您也不知道它是泛型类型。

更新:

如果您自己编写了 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/

相关文章:

delphi - 这段代码对指针做了什么?

java - 在 Tomcat 上使用多个 Web 应用程序确定 Quartz 设置

android - Android XML 中的 TextColor 不起作用?

java - getSupportFragmentManager() 在我的适配器类中不起作用?

java - 尝试在android中的AsyncTask中读取文本文件,但我得到空结果

java.lang.ClassCastException : java. lang.String JSON Tokener android

c++ - 传递带有命名空间的 void 函数的转换错误

java - 如何在 WebSphere MQ 的 rfhutilc 中设置 JMS 属性?

java - 输入字符串已编码,需要原始字符串 - Java 代码

java - 将多行字符串从 JsonNode 序列化为 YAML 字符串会添加双引号和 "\n"