6

型消去instanceofのためだと思いますが、使用class literalsすることはできませparameterized generic typesunbounded wild card types。Java言語設計者がこの例外を許可したのはなぜですか?無制限のワイルドカードタイプの型消去の役割はありませんか?

4

1 に答える 1

8

重要なのは、オブジェクトはその具象クラスを知っているということですが、そのためのジェネリック型引数は知りません。したがって、を作成するArrayList<Integer>と、実行時にそれArrayList何らかのものであることを認識しますが、その部分については認識しませんInteger

ArrayListある種の」部分はまさにそのArrayList<?>意味であり、それが理由です。

if (foo instanceof ArrayList<?>)

有効です。これは、rawタイプを使用するのと同じです。

if (foo instanceof ArrayList)
于 2013-02-19T13:59:23.673 に答える