[解決済み] List<SubClass> を List<BaseClass> にキャストする最も効率的な方法
質問
私は
List<SubClass>
として扱いたい。
List<BaseClass>
. をキャストするので、問題なさそうです。
SubClass
を
BaseClass
は簡単にできますが、私のコンパイラはキャストが不可能であると文句を言います。
では、同じオブジェクトを参照するためにはどうすればいいかというと
List<BaseClass>
?
今は新しいリストを作って、古いリストをコピーしているだけです。
List<BaseClass> convertedList = new ArrayList<BaseClass>(listOfSubClass)
しかし、私の理解では、それは全く新しいリストを作成する必要があります。 できれば、元のリストへの参照が欲しいです!
解決方法は?
この種の割り当ての構文は、ワイルドカードを使用します。
List<SubClass> subs = ...;
List<? extends BaseClass> bases = subs;
ここで重要なのは
List<SubClass>
は
ではなく
と互換性があります。
List<BaseClass>
. への参照を保持するコード。
List<SubClass>
は、リスト内のすべての項目が
SubClass
. 別のコードで、リストを
List<BaseClass>
を指定した場合、コンパイラは文句を言いません。
BaseClass
または
AnotherSubClass
が挿入されます。しかし、これによって
ClassCastException
このコードでは、リスト内のすべての要素が
SubClass
.
一般的なコレクションは、Javaの配列と同じように動作するわけではありません。配列は共変であり、つまり、このようなことが許されるのです。
SubClass[] subs = ...;
BaseClass[] bases = subs;
これは、配列がその要素の型を知っているからです。もし誰かが
SubClass
を使用して)配列の中に
bases
を参照)、実行時例外がスローされます。
一般的なコレクションは
ない
この情報はコンパイル時に消去されます。したがって、無効なストアが発生したときに実行時例外を発生させることはできません。その代わり
ClassCastException
は、コレクションから値が読み込まれたときに、コード内のどこか遠くて関連づけにくいポイントで発生します。型安全性に関するコンパイラの警告に注意すれば、実行時にこのような型エラーが発生することはないだろう。
関連
-
[解決済み】JavaでMap値をインクリメントする最も効率的な方法
-
javaの模造品QQ WeChatのチャットルーム
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
-
[解決済み] Javaでリストを集合に変換する最も簡単な方法
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】List<DerivedClass>からList<BaseClass>に変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java の例外が発生しました java
-
ファインバグタイプ
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind