是否可以制作数组列表?

Wal*_*alt 1 java arrays list arraylist

我有 3 个数组,2 个 int 类型的数组和一个 String 类型的数组。

我的问题是,是否可以制作一个包含这 3 个数组的列表?

我希望能够做这样的事情:myList.get(0)这应该给我列表中的第一个数组。

dav*_*xxx 5

这是可能的,但是在 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)

所以当然,您应该忘记将这些数组添加到列表中的想法。