Подтвердить что ты не робот

Java.lang.ClassCastException: java.util.Arrays $ArrayList нельзя отбрасывать в java.util.ArrayList

Можете ли вы объяснить мне, почему это происходит и как я могу его исправить?

Итак, я использую Oracle-ADF, и я использую компоненты челнока. Я получаю выбранные значения с помощью sos1.getValue();

Метод getValue() возвращает объект, и я пытаюсь преобразовать его в ArrayList, чтобы потом работать с ним. Поэтому я создал ArrayList sos1Value

Однако эта строка кода идет бананами:

sos1Value = (ArrayList) Arrays.asList(sos1.getValue());

И я продолжаю иметь java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

Я пробовал другие способы: sos1Value = (ArrayList) sos1.getValue();

Но у меня такая же проблема, что я могу сделать?

4b9b3361

Ответ 1

Arrays.asList возвращает реализацию List, но это не java.util.ArrayList. Случается, что у него есть имя класса ArrayList, но вложенный класс в Arrays - это совершенно другой тип по java.util.ArrayList с java.util.ArrayList.

Если вам нужен java.util.ArrayList, вы можете просто создать копию:

ArrayList<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue()); 

или же:

List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue())); 

(если вам не нужны никакие члены, выставленные только ArrayList).

Ответ 2

Arrays.asList(sos1.getValue()); создает экземпляр реализации List (java.util.Arrays$ArrayList), который не является java.util.ArrayList. Поэтому вы не можете наложить его на java.util.ArrayList.

Если вы измените тип sos1Value на List, вам не понадобится этот бросок.

Если у вас должен быть экземпляр java.util.ArrayList, вы можете создать его самостоятельно:

sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));

Ответ 3

ArrayList, возвращаемый методом Arrays.asList(), не является java.util.ArrayList, это статический внутренний класс внутри класса Arrays. Таким образом, вы не можете наложить его на java.util.ArrayList.

Попробуйте преобразовать/присвоить его List.