奇怪的情况-下面是代码:
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
找到:对象
但用同样的方法来浇铸字符串是可以的。这里有什么问题?
编译器抱怨
ArrayList<String[]> list = (ArrayList<String[]>) obj[1]
因为强制转换是一种运行时检查。所以在运行时,您的数组列表
这是因为如果您尝试将整数转换为字符串,您将在运行时得到ClassCastException。但这里不会有ClassCastException:
ArrayList<Integer[]> listArr = new ArrayList<>();
ArrayList<String[]> list = (ArrayList<String[]>) obj[1];
问题内容: 奇怪的情况-以下是代码: 构建项目时(在项目属性中带有编译器选项),我得到一个警告: 警告:[unchecked]未经检查的强制转换 ArrayList list =(ArrayList)obj [1]; 必需: 找到ArrayList :对象 但是以相同的方式转换String是可以的。这里有什么问题? 问题答案: 这是因为编译器无法在列表级别验证内部类型,因此您需要首先验证列表。以及
下面是程序的一部分,它将ArrayList从服务器发送到客户端。我想删除关于此代码最后一行的警告: 客户端代码: MyVariable是一个具有一些属性的Java类。服务器正在创建一个ArrayList并用MyVariable变量作为项目填充它。然后它将完整的列表发送给客户端。 我想知道为什么我在那里有一个警告,以及如何完美地编码以获得0个警告。如果可能,我希望避免使用“@SuppressWarn
我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我! 有什么方法可以克服这个问题,或者我可以安全地压制警告吗?
//一些代码... 方法的定义: 执行存储过程并返回输出参数的映射,按名称键入,如参数声明中所示 上面一行的警告: 来抑制它。 问题:但我如何正确地施放它呢? > 我尝试的一种方法是 不过,我还是必须在castObject()方法中放入SuppressWarnings(“unchecked”)。我不知道这样做是否正确。 我尝试的第二种方法是, 欢迎提出任何建议/建议。
当我使用像或这样的IO类时,Eclipse会显示一个警告。如何使Eclipse在我自己的类未关闭时为它显示此警告? 我想知道的是,是否有一个接口或我需要实现的东西来使我的类被视为IO类,以便它独立于任何一个IDE,例如,命令行在资源未关闭时也会显示警告。
那么谁能解释一下这里的区别是什么,为什么java会做这样的设计呢?多谢了。 编辑:一个类似的问题