web-dev-qa-db-ja.com

java.lang.ClassCastException:Java.util.Arrays $ ArrayListをJava.util.ArrayListにキャストできません

これがなぜ起こるのか、どうすれば修正できるのか説明してもらえますか?

したがって、Oracle-ADFを使用し、シャトルコンポーネントを使用しています。 sos1.getValue();を使用して選択した値を取得します

GetValue()メソッドはオブジェクトを返しますが、後で操作できるようにArrayListに変換しようとしています。したがって、私は_ArrayList sos1Value_を作成しました

ただし、次のコード行はバナナになります。

_sos1Value = (ArrayList) Arrays.asList(sos1.getValue());
_

そして、私は_Java.lang.ClassCastException: Java.util.Arrays$ArrayList cannot be cast to Java.util.ArrayList_を持ち続けます

私は次のような他の方法を試しました:sos1Value = (ArrayList) sos1.getValue();

しかし、私は同じ問題を抱え続けています、私は何ができますか?

42
SaintLike

Arrays.asListList実装を返しますが、Java.util.ArrayListではありません。たまたまArrayListのクラス名を持っていますが、それはArrays内のネストされたクラスです-Java.util.ArrayListとはまったく異なる型です。

必要 a Java.util.ArrayListの場合、コピーを作成できます。

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

または:

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

ArrayListだけで公開されるメンバーが必要ない場合)。

79
Jon Skeet

Arrays.asList(sos1.getValue());は、Java.util.ArrayListではないList実装(Java.util.Arrays$ArrayList)のインスタンスを生成します。したがって、Java.util.ArrayListにキャストすることはできません。

sos1ValueのタイプをListに変更する場合、このキャストは不要です。

Java.util.ArrayListのインスタンスが必要な場合、自分で作成できます。

sos1Value = new ArrayList (Arrays.asList(sos1.getValue()));
7
Eran

Arrays.asList()メソッドによって返されるArrayListJava.util.ArrayListではなく、Arraysクラス内の静的内部クラスです。したがって、Java.util.ArrayListにキャストすることはできません。

Listに変換/割り当ててみてください。

5
TheLostMind