繁体   English   中英

将Object转换为ArrayList时出现“Warning:[unchecked] unchecked cast” <String[]>

[英]“Warning: [unchecked] unchecked cast” when casting Object to ArrayList<String[]>

奇怪的情况 - 下面是代码:

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在项目属性中-Xlint:unchecked ),我收到一个警告:

警告:[未选中]未经检查的强制转换
ArrayList list =(ArrayList)obj [1];
required:ArrayList
发现:对象

但是以相同的方式构建String是可以的。 这里有什么问题?

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

而不是ArrayList<String[]> list = (ArrayList<String[]>) obj[1];

它应该是ArrayList<?> list = (ArrayList<?>) obj[1];

这是因为如果您尝试将Integer转换为String,您将在运行时获得ClassCastException。 但是这里不会有ClassCastException:

    ArrayList<Integer[]> listArr = new ArrayList<>();
    ArrayList<String[]> list = (ArrayList<String[]>) obj[1];

编译器抱怨

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

因为强制转换是运行时检查。 因此,在运行时,您的ArrayList<String[]>可以是ArrayList<Whatever[]> ,因为obj的类型未知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM