java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
Solution 1
Arrays.asList
returns a List
implementation, but it's not a java.util.ArrayList
. It happens to have a classname of ArrayList
, but that's a nested class within Arrays
- a completely different type from java.util.ArrayList
.
If you need a java.util.ArrayList
, you can just create a copy:
ArrayList<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue());
If you don't need an ArrayList just remove the cast:
List<Foo> list = Arrays.asList(sos1.getValue());
(if you don't need any members exposed just by ArrayList
).
Solution 2
Arrays.asList(sos1.getValue());
produces an instance of a List implementation (java.util.Arrays$ArrayList
) that is not java.util.ArrayList. Therefore you can't cast it to java.util.ArrayList
.
If you change the type of sos1Value
to List
, you won't need this cast.
If you must have an instance of java.util.ArrayList
, you can create it yourself :
sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
Solution 3
The ArrayList
returned by Arrays.asList()
method is NOT java.util.ArrayList
it is a static inner class inside Arrays
class. So, you can't cast it to java.util.ArrayList
.
Try converting / assigning it to a List
.
Related videos on Youtube
Comments
-
SaintLike almost 2 years
Can you explain me why does this happen and how can I fix it please?
So I'm using Oracle-ADF and I'm using shuttle components. I get the selected values using the
sos1.getValue();
The getValue() method returns an object and I'm trying to convert it to an ArrayList so I can work with it later. Therefore I've created the
ArrayList sos1Value
However, this line of code is going bananas:
sos1Value = (ArrayList) Arrays.asList(sos1.getValue());
And I keep getting
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
I've tried other ways like:
sos1Value = (ArrayList) sos1.getValue();
But I keep having the same problem, what can I do?
-
SaintLike about 9 yearshow can I fix it then?
-
TheLostMind about 9 yearsWhy not assign it to a
List
directly?. -
Jon Skeet about 9 years@AlexisC.: Sorry, meant to do that :)
-
Jon Skeet about 9 years@TheLostMind: Not sure what you mean - the declared type of
list
? -
TheLostMind about 9 yearsYou've added it -
List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue());
:) -
Jon Skeet about 9 years@TheLostMind: Righto.
-
absin over 6 years
new ArrayList<String>( Arrays.asList(new String[] { "hey", "yo"}))
would also work -
Alexander almost 6 years@AbSin The inner
new String[] { }
is redundant. TheasList(String...)
method implicitly allocates such a string array, without you needing to explicitly spell it out. -
Alexander almost 6 years@JonSkeet What's the motivation behind having a separate
ArrayList
class? Why couldn't the implementation do something likereturn Collections.unmodifiableList(new ArrayList(array));
? -
Jon Skeet almost 6 years@Alexander: That would copy the array, rather than providing a view over it. They behave very differently.