当前位置: 首页 > 知识库问答 >
问题:

将对象强制转换为ArrayList时,“警告:[未选中]未选中强制转换”

曹旭东
2023-03-14

奇怪的情况-下面是代码

ArrayList<String[]> listArr = new ArrayList<>();
Object[] obj = new Object[]{"str", listArr};

String str = (String) obj[0];//OK
ArrayList<String[]> list = (ArrayList<String[]>) obj[1];//warning: [unchecked] unchecked cast

构建项目时(在项目属性中使用编译器选项Xlint:unchecked),我得到一个警告:

警告:[未选中]未选中的强制转换
ArrayList list=(ArrayList)obj[1];
必需:ArrayList
找到:对象

但用同样的方法来浇铸字符串是可以的。这里有什么问题?

共有3个答案

秦英发
2023-03-14

编译器抱怨

ArrayList<String[]> list = (ArrayList<String[]>) obj[1]

因为强制转换是一种运行时检查。所以在运行时,您的数组列表

闻人伟
2023-03-14

这是因为如果您尝试将整数转换为字符串,您将在运行时得到ClassCastException。但这里不会有ClassCastException:

    ArrayList<Integer[]> listArr = new ArrayList<>();
    ArrayList<String[]> list = (ArrayList<String[]>) obj[1];
陈允晨
2023-03-14

这是因为编译器无法在列表级别验证内部类型,因此您需要首先验证列表。和单独的内部类型。

而不是ArrayList

它应该是ArrayList

 类似资料:
  • 问题内容: 奇怪的情况-以下是代码: 构建项目时(在项目属性中带有编译器选项),我得到一个警告: 警告:[unchecked]未经检查的强制转换 ArrayList list =(ArrayList)obj [1]; 必需: 找到ArrayList :对象 但是以相同的方式转换String是可以的。这里有什么问题? 问题答案: 这是因为编译器无法在列表级别验证内部类型,因此您需要首先验证列表。以及

  • 下面是程序的一部分,它将ArrayList从服务器发送到客户端。我想删除关于此代码最后一行的警告: 客户端代码: MyVariable是一个具有一些属性的Java类。服务器正在创建一个ArrayList并用MyVariable变量作为项目填充它。然后它将完整的列表发送给客户端。 我想知道为什么我在那里有一个警告,以及如何完美地编码以获得0个警告。如果可能,我希望避免使用“@SuppressWarn

  • 我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我! 有什么方法可以克服这个问题,或者我可以安全地压制警告吗?

  • //一些代码... 方法的定义: 执行存储过程并返回输出参数的映射,按名称键入,如参数声明中所示 上面一行的警告: 来抑制它。 问题:但我如何正确地施放它呢? > 我尝试的一种方法是 不过,我还是必须在castObject()方法中放入SuppressWarnings(“unchecked”)。我不知道这样做是否正确。 我尝试的第二种方法是, 欢迎提出任何建议/建议。

  • 当我使用像或这样的IO类时,Eclipse会显示一个警告。如何使Eclipse在我自己的类未关闭时为它显示此警告? 我想知道的是,是否有一个接口或我需要实现的东西来使我的类被视为IO类,以便它独立于任何一个IDE,例如,命令行在资源未关闭时也会显示警告。

  • 那么谁能解释一下这里的区别是什么,为什么java会做这样的设计呢?多谢了。 编辑:一个类似的问题