Java:コレクションタイプをサブタイプにキャストする[複製]
-
22-07-2019 - |
質問
この質問にはすでに回答があります:
クラスB
がクラスA
を拡張するとします。 List<A>
のインスタンスがのみに含まれていることを知っているList<B>
があります。 <=>を<=>にキャストする方法はありますか?
私の唯一の選択肢は、コレクションを反復処理し、一度に1つの要素をキャストし、新しいコレクションを作成することです。これは、型の消去を行うとリソースがまったく無駄になるため、実行時にこれが完全に不要になるようです。
解決
型指定されていないListインターフェースからキャストできます:
List<A> a = new ArrayList<A>();
List<B> b = (List)a;
他のヒント
これを試すことができます:
List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;
これはjarnbjoの回答に基づいていますが、生のリストを使用しないでください。
パフォーマンスへの影響を最小限に抑えながら、何らかのタイプセーフティを保持する方法は、ラッパー。この例はコレクションに関するもので、リストの場合は非常によく似ています。おそらくいつかそれも書きます。私の前に誰かが来たら、コードを共有しましょう。
所属していません StackOverflow