Java - 如何从包含泛型数组的 ArrayList 访问值



我有一个包含不同类型的数组的通用 ArrayList。我需要遍历内部数组的每个元素并访问它们。但是,由于使用了泛型,我不确定如何访问内部数组元素。

一旦我从 ArrayList 的第一个循环中获得数组,我该如何访问每个元素?

这是我所拥有的简化版本:

public static void main(String[] args) {
        ArrayList<Object[]> arrList = new ArrayList<>();
        Integer[] a1 = {1,2,3,4};
        String[] a2 = {"a", "b", "c"};
        Double[] a3 = {4.0, 5.0, 6.0};
        arrList.add(a1);
        arrList.add(a2);
        arrList.add(a3);
        printList(arrList);
    }
    public static <E> void printList(ArrayList<E> arrList) {
        for (E arr : arrList) {
            for (E elm : arr) {
                System.out.println(elm);
            }
        }
    }

问题是,在方法的主体中,编译器不知道E是一个数组。 E可以是字符串、整数或其他任何内容。嵌套循环是不可能的,因为它们不适用于这些情况。

可以在方法声明中使用ArrayList<E[]>而不是ArrayList<E>,以使此方法仅适用于数组。当我们这样做时,E会解析为Object而不是Object[]

public static <E> void printList(ArrayList<E[]> arrList) {
    for (E[] arr : arrList) {
        for (E elm : arr) {
            System.out.println(elm);
        }
    }
}

如果仅将 arrList(类型为 ArrayList<Object[]>(传递给此方法,则它不需要是泛型的。你可以让它接受ArrayList<Object[]>

public static void printList(ArrayList<Object[]> arrList) {
    for (Object[] arr : arrList) {
        for (Object elm : arr) {
            System.out.println(elm);
        }
    }
}

System.out.println(Arrays.deepToString(arrList.toArray()));

用于轻松快速地打印多维阵列。

最新更新