奇怪的情况-以下是代码:
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
构建项目时,在项目属性中,我会收到一个警告:
但是以同样的方式将String转换是可以的。这里的问题是什么?警告:[unchecked] 未经检查的转换
ArrayList list =(ArrayList)obj [1];
必需:ArrayList
找到: Object
ArrayList<String[]>
类型,这样我就可以将其传递给需要ArrayList<String[]>
的方法(否则代码将无法编译)?还是我应该忽略这个警告? - Ernestas GruodisObject[]
?Java的类型系统允许您跟踪对象的类型,如果您故意决定删除这些类型信息,就不应该抱怨丢失了类型信息... - HolgerObject[]
因为该方法返回多种数据类型。这意味着问题已经得到解答。 - Ernestas Gruodis