Java.lang.ClassCastException: java.util.Arrays$ArrayList ne peut pas être envoyé à java.util.ArrayList

Pouvez-vous m'expliquer pourquoi cela se produit et comment puis-je résoudre ce problème s'il vous plaît?

donc J'utilise Oracle-ADF et j'utilise des composants de navette. J'obtiens les valeurs sélectionnées à l'aide de la sos1.getValue();

la méthode getValue() retourne un objet et j'essaye de le convertir en un ArrayList pour pouvoir travailler avec lui plus tard. Par conséquent, j'ai créé le ArrayList sos1Value

Cependant, cette ligne de code est fou:

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

Et je continue à avoir un java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

j'ai essayé d'autres moyens comme: sos1Value = (ArrayList) sos1.getValue();

mais j'ai toujours le même problème, que puis-je faire?

33
demandé sur SaintLike 2015-03-04 13:08:50

3 réponses

Arrays.asList retourne un List implémentation, mais ce n'est pas un java.util.ArrayList. Il arrive d'avoir un nom de classe de ArrayList, mais c'est une classe imbriquée à l'intérieur de Arrays - un genre complètement différent de java.util.ArrayList.

Si vous besoinjava.util.ArrayList, il vous suffit de créer une copie:

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

ou:

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

(si vous n'avez pas besoin de membres exposés juste par ArrayList).

61
répondu Jon Skeet 2015-03-04 10:21:03

Arrays.asList(sos1.getValue()); produit une instance d'implémentation D'une liste (java.util.Arrays$ArrayList) qui n'est pas java.util.Liste de tableaux. Par conséquent, vous ne pouvez pas jeter par java.util.ArrayList.

si vous changez le type de sos1ValueList, vous n'aurez pas besoin de cette distribution.

Si vous devez avoir une instance de java.util.ArrayList, vous pouvez créer vous-même :

sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
6
répondu Eran 2015-03-04 10:10:27

ArrayList retournée par Arrays.asList() la méthode n'est pas Arrays classe. Donc, vous ne pouvez pas jeter par java.util.ArrayList.

essayez de le convertir / l'affecter à un List.

4
répondu TheLostMind 2015-03-04 10:10:56