java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

JavaArraylistCasting

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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.

Solution 4 - Java

The easy way (not efficient) 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

But I'm not clear what you want to do.

Solution 5 - Java

I used it in this way:

 private fun getArtists(): ArrayList<ArtistItem> {
        var xp = myDb.daoNote().getArtists() as ArrayList<ArtistItem>
        val x: List<ArtistItem> =  xp.sortedWith(compareBy { it.isBookmarked})
        var pp = ArrayList<ArtistItem>()
        for(obj in x)
        {
            pp.add(obj)
        }

     return pp
    }

Solution 6 - Java

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

You need to set the type to java.util.List

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSaintLikeView Question on Stackoverflow
Solution 1 - JavaJon SkeetView Answer on Stackoverflow
Solution 2 - JavaEranView Answer on Stackoverflow
Solution 3 - JavaTheLostMindView Answer on Stackoverflow
Solution 4 - JavagalianView Answer on Stackoverflow
Solution 5 - JavaClean CoderView Answer on Stackoverflow
Solution 6 - Javauser16093475View Answer on Stackoverflow