我有3个数组,2个int类型的数组,以及一个String类型的数组。
我的问题是,是否可以制作包含这3个数组的List?
我希望能够做到这样的事情:myList.get(0)
它应该给我列表中的第一个数组。
答案 0 :(得分:4)
这是可能的,但是在List中添加不同类型的数组的值是什么?
您必须声明List<Object>
或List<Object[]>
。因此,您必须将数组或数组元素转换为操作Object
变量等其他内容,否则您将失去类型安全的好处。
例如:
List<Object[]> list = new ArrayList<>();
list.add(new String[5]);
list.add(new Integer[5]);
Object[] objects = list.get(0);
你被Object[]
困住了。
要操纵更具体的类型,您必须执行向下转换:
String[] objects = (String[]) list.get(0);
这样可以,但您可以输入错误,例如:
Integer[] objects = (Integer[]) list.get(0);
并且您只能在运行时将该信息作为例外。
请注意,在向下转换阵列之前使用instanceof
运算符不会阻止程序出现故障。
例如,由于条件语句将被评估为ClassCastException
,因此false
不会上升:
if (list.get(0) instanceof Integer[]){
Integer[] objects = (Integer[]) list.get(0);
...
}
但结果是,它永远不会执行处理。它在某种程度上更糟糕,因为客户端可能看不到问题。
如果客户端错误地使用了列表但使用反向逻辑将抛出异常作为初始代码但最终更加冗长:
if (!(list.get(0) instanceof Integer[])){
... // throw exception
}
Integer[] objects = (Integer[]) list.get(0);
所以当然,你应该忘记在List中添加这些数组的想法。