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.asList
retourneert een List
implementatie, 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.ArrayList
hebt, 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 ArrayList
worden 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 sos1Value
wijzigt in List
, heb je deze cast niet nodig.
Als u een instantie van java.util.ArrayList
moet hebben, kunt u deze zelf maken:
sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
Antwoord 3, autoriteit 6%
De ArrayList
die wordt geretourneerd door de methode Arrays.asList()
is NIET java.util.ArrayList
het is een statische innerlijke klasse binnen Arrays
klasse. 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