1

メソッドから返されたArrayListオブジェクトを参照でキャストしたい場合:List

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

メソッドからの戻り値の型はオブジェクトへasListの参照です。つまり、List参照にArrayListキャストできArrayListます。そのような :

String[] colors = { "black", "blue", "yellow" };
ArrayList<String> links = (ArrayList<String>) Arrays.asList(colors) ;

しかし、このコードは実行時エラーを起こしました:

スレッド「メイン」の例外 java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません

なぜそれが起こったのですか?

4

1 に答える 1

4

ArrayList にキャストできるというあなたの仮定は無効です。

インターフェイスを実装するArrayList具象型です。methodがこのタイプの実装を返すListことは保証されていません。asList

実際に使用されるタイプはjava.util.Arrays$ArrayListです。

インターフェイスの代わりに具体的なクラスを使用します。悪い習慣として認識できます。このアプローチは、特別なタイプのクラスがあり、このタイプがタスク専用であることを将来の開発者にヒントを与えたい場合に適しています。

ただし、API は最も抽象的な方法で公開する必要があります。そのため、Listが使用されました。

于 2013-05-13T09:43:07.153 に答える