Рубрики
Без рубрики

ClassCastException: Arrays$ArrayList не может быть отлит в ArrayList

Узнайте, как избежать создания ClassCastException при работе с различными реализациями Java List.

Автор оригинала: baeldung.

ClassCastException: Arrays$ArrayList не может быть отлит в ArrayList

1. Введение

ClassCastException это исключение времени выполнения, поднятое в Java, когда мы пытаемся неправильно разбросать класс из одного типа в другой. Он брошен, чтобы указать, что код пытался бросить объект в связанный класс, но из которых это не экземпляр.

Для более углубленного введения исключений в Java, взгляните здесь .

2. Подробности ClassCastException

Во-первых, давайте рассмотрим простой пример. Рассмотрим следующий фрагмент кода:

String[] strArray = new String[] { "John", "Snow" };
ArrayList strList = (ArrayList) Arrays.asList(strArray);
System.out.println("String list: " + strList);

Вышеупомянутый код вызывает ClassCastException где мы отбрасываем возвратную стоимость Arrays.asList (strArray) к ArrayList.

Причина в том, что, хотя статический метод Arrays.asList() возвращает Список, мы не знаем, пока время выполнения точно, что реализация возвращается . Таким образом, на момент компиляции компилятор не может знать ни и позволяет литые .

При запуске кода проверяется фактическая реализация, которая находит это Arrays.asList () возвращает Arrays$Список вызывая тем ClassCastException .

3. Разрешение

Мы можем просто заявить о своей ArrayList в качестве Список чтобы избежать этого исключения:

List strList = Arrays.asList(strArray);
System.out.println("String list: " + strList);

Однако, объявив нашу ссылку в качестве Список мы можем назначить любой класс, который реализует Список интерфейс , в том числе Arrays$ArrayList возвращается методом вызова.

4. Резюме

В этой статье мы видели объяснение того, что именно является ClassCastException и какие меры мы должны принять для решения этой проблемы.

Полный код можно найти более на GitHub .