8

次のスニペットがコンパイルされないのはなぜですか?

if (mangoList instanceof List<Mango>) { System.out.println("true"); }
  • mangoList が List 型であることを知りません。
  • instanceof キーワードは、プリミティブ型でのみ機能します。
  • リフレクションを使用してのみコレクションのタイプを確認できます。
  • ジェネリック型は実行前に消去されます。(ans)
  • このステートメントにより、mangoList が List のインスタンスに設定される可能性があります。

どれが正解だと思いますか?

4

3 に答える 3

7

正解は、あなたがマークしたものですans。それがであることはわかりますが、消去された引数の型を取得することmangoListListできません。残りの選択肢は意味がありません。

于 2012-07-16T00:13:46.007 に答える
3

1.はい「ジェネリック型は実行時に消去されます」。

2.そのため、リストのタイプを知ることはできません。

3.しかし、mangoList がリストであることは認識できます。

于 2012-07-16T03:08:11.067 に答える
0

ただし、 mangoList instanceof List を使用して、それが何らかのタイプのリストであるかどうかを確認できます。これは、たとえば、List と Mango オブジェクトのどちらを取得したかがわからない場合に役立ちますが、List のタイプを区別することはできません。そのためには、最初の要素の型を確認することをお勧めします。

于 2012-07-16T00:21:34.153 に答える