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

115,478

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.

Share:
115,478

Related videos on Youtube

SaintLike
Author by

SaintLike

I'm always looking for new challenges

Updated on July 18, 2022

Comments

  • SaintLike
    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
    SaintLike about 9 years
    how can I fix it then?
  • TheLostMind
    TheLostMind about 9 years
    Why not assign it to a List directly?.
  • Jon Skeet
    Jon Skeet about 9 years
    @AlexisC.: Sorry, meant to do that :)
  • Jon Skeet
    Jon Skeet about 9 years
    @TheLostMind: Not sure what you mean - the declared type of list?
  • TheLostMind
    TheLostMind about 9 years
    You've added it - List<Foo> list = new ArrayList<>(Arrays.asList(sos1.getValue()); :)
  • Jon Skeet
    Jon Skeet about 9 years
    @TheLostMind: Righto.
  • absin
    absin over 6 years
    new ArrayList<String>( Arrays.asList(new String[] { "hey", "yo"})) would also work
  • Alexander
    Alexander almost 6 years
    @AbSin The inner new String[] { } is redundant. The asList(String...) method implicitly allocates such a string array, without you needing to explicitly spell it out.
  • Alexander
    Alexander almost 6 years
    @JonSkeet What's the motivation behind having a separate ArrayList class? Why couldn't the implementation do something like return Collections.unmodifiableList(new ArrayList(array));?
  • Jon Skeet
    Jon Skeet almost 6 years
    @Alexander: That would copy the array, rather than providing a view over it. They behave very differently.