这是可能的,但是在 List 中添加不同类型的数组的值是什么?
您必须声明 aList<Object>或List<Object[]>。因此,您失去了类型安全的好处,因为您必须强制转换数组或数组元素以将其他事物作为Object变量进行操作。
例如 :
List<Object[]> list = new ArrayList<>();
list.add(new String[5]);
list.add(new Integer[5]);
Object[] objects = list.get(0);
Run Code Online (Sandbox Code Playgroud)
你被一个Object[].
要操作更具体的类型,您必须执行 downcast :
String[] objects = (String[]) list.get(0);
Run Code Online (Sandbox Code Playgroud)
这会起作用,但您可能会犯以下错误:
Integer[] objects = (Integer[]) list.get(0);
Run Code Online (Sandbox Code Playgroud)
并且您只会在运行时将信息作为异常。
请注意,instanceof在向下转换数组之前使用运算符不会防止程序出现故障。
例如,这不会上升,ClassCastException因为条件语句将被评估为false:
if (list.get(0) instanceof Integer[]){
Integer[] objects = (Integer[]) list.get(0);
...
}
Run Code Online (Sandbox Code Playgroud)
但因此,它永远不会执行处理。从某种意义上说,情况更糟,因为客户可能看不到问题。
如果客户端错误地使用列表但最终更冗长,则使用反向逻辑将抛出异常作为初始代码:
if (!(list.get(0) instanceof Integer[])){
... // throw exception
}
Integer[] objects = (Integer[]) list.get(0);
Run Code Online (Sandbox Code Playgroud)
所以当然,您应该忘记将这些数组添加到列表中的想法。
| 归档时间: |
|
| 查看次数: |
5651 次 |
| 最近记录: |