java.lang.ClassCastException: java.util.Arrays$ArrayList kan niet worden gecast naar java.util.ArrayList

Kun je me uitleggen waarom dit gebeurt en hoe ik het kan oplossen?

Dus ik gebruik Oracle-ADF en ik gebruik shuttle-componenten. Ik krijg de geselecteerde waarden met behulp van de sos1.getValue();

De methode getValue() retourneert een object en ik probeer het naar een ArrayList te converteren, zodat ik er later mee kan werken. Daarom heb ik de ArrayList sos1Value

. gemaakt

Deze regel code wordt echter gek:

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

En ik krijg steeds java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

Ik heb andere manieren geprobeerd, zoals: sos1Value = (ArrayList) sos1.getValue();

Maar ik blijf hetzelfde probleem houden, wat kan ik doen?


Antwoord 1, autoriteit 100%

Arrays.asListretourneert een Listimplementatie, maar het is geen java.util.ArrayList. Het heeft toevallig een klassenaam van ArrayList, maar dat is een geneste klasse binnen Arrays– een heel ander type dan java.util.ArrayList.

Als je nodigeen java.util.ArrayListhebt, kun je gewoon een kopie maken:

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

of:

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

(als je geen leden nodig hebt die alleen door ArrayListworden getoond).


Antwoord 2, autoriteit 7%

Arrays.asList(sos1.getValue());produceert een instantie van een List-implementatie (java.util.Arrays$ArrayList) die niet java.util is .ArrayLijst. Daarom kun je het niet casten naar java.util.ArrayList.

Als je het type sos1Valuewijzigt in List, heb je deze cast niet nodig.

Als u een instantie van java.util.ArrayListmoet hebben, kunt u deze zelf maken:

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

Antwoord 3, autoriteit 6%

De ArrayListdie wordt geretourneerd door de methode Arrays.asList()is NIET java.util.ArrayListhet is een statische innerlijke klasse binnen Arraysklasse. U kunt het dus niet casten naar java.util.ArrayList.

Probeer het te converteren / toe te wijzen aan een List.


Antwoord 4

De gemakkelijke manier (niet efficiënt) is

ArrayList sos2Value = new ArrayList()
sos2Value.addAll(Arrays.asList(sos1.getValue()))

sos2Value is java.util.ArrayList.
Arrays.asList(sos1.getValue()) is java.util.Arrays$ArrayList

Maar het is me niet duidelijk wat je wilt doen.


Antwoord 5

java.lang.ClassCastException: java.util.Arrays$ArrayList kan niet worden gecast naar java.util.ArrayList

U moet het type instellen op java.util.List

Other episodes