У меня есть универсальный 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);
            }
        }
    }
-1
grizzasd 18 Апр 2019 в 12:22

2 ответа

Лучший ответ

Проблема в том, что в теле метода компилятор не знает, что 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);
        }
    }
}
7
Michael 18 Апр 2019 в 09:30

Видеть

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

Для простой и быстрой печати многомерного массива.

1
spi 18 Апр 2019 в 09:28