私は変数を持っています:
Class<Map.Entry<String, Boolean>> clazz;
そして、何もインスタンス化せずにクラスを割り当てたいと思います。しかし、コンパイラは私に書くことを許しません:
Class<Map.Entry<String, Boolean>> clazz = Map.Entry<String, Boolean>.class;
課題はどうすればいいですか?
Class<Map.Entry<String, Boolean>> clazz =
(Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;
ああ、タイプ消去の喜び。
Map.Entry
Java コンパイラは、 (raw) 型とMap.Entry<String, Boolean>
(パラメータ化された)型を区別します。残念ながら、 を使用して型リテラルに型パラメーターを追加することはできません.class
。したがって、キャストする必要があります。ただし、これを直接行うことはできません。を「迂回」する必要がありますClass<?>
。正確には、申し訳ありませんが、理由は覚えていません:)。
また、(この場合) キャストが常に成功することがわかっているため、抑制できる「チェックされていない」警告が表示されます。そう:
@SuppressWarnings("unchecked")
Class<Map.Entry<String, Boolean>> clazz =
(Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;
(この代入が発生するメソッドに警告を表示する必要はありません。代入の前に直接配置するだけでかまいません。)
楽しみ!:)