2012-07-16 7 views
8

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

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

あなたはどちらが正しい答えだと思いますか?

+0

正しい答えはどちらですか?どうして? – Bernard

答えて

7

正解はansと記したものです。 mangoListListであることがわかりますが、消去された引数のタイプを取得することはできません。残念な選択は意味をなさない。

+0

ええ、それは私が推測していたものです。 –

0

ただし、mangoList instanceof Listを使用して、あるタイプのリストであるかどうかを確認できます。これは、ListオブジェクトやMangoオブジェクトがあるかどうか不明な場合などに便利ですが、Listのタイプを区別することはありません。これを行うには、そのタイプの最初の要素をチェックすることをお勧めします。

3

1.はい「実行時に汎用タイプが消去されます。

2.リストの種類を伝えることはできません。

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