Genericsについては、this questionで裏で何をしているのかがよく議論されているので、Vector<int[]>
が整数配列のベクトルであることや、HashTable<String, Person>
が文字列をキー、Person
を値とするテーブルであることは知っています。
しかし、困ってしまうのは、Class<>
の使い方です。
javaのクラスClass
はテンプレート名も取ることになっています(eclipseの黄色い下線でそう言われています)。 何を入れればいいのかわかりません。 Classオブジェクトの要点は、リフレクションなどのために、オブジェクトに関する情報を完全には持っていない場合です。 なぜ、
Classオブジェクトが保持するクラスを指定しなければならないのでしょうか? 明らかにわからないからです。でなければ、
Class`オブジェクトを使わずに、特定のものを使うでしょう。
Javaドキュメントより。
[...] さらに驚くべきことに、クラスClassが生成されました。クラスリテラルは、ランタイムとコンパイルタイムの両方の型情報を提供する型トークンとして機能するようになりました。これにより、新しい AnnotatedElement インターフェースの getAnnotation メソッドに代表されるような、静的なファクトリのスタイルが可能になりました。
<T extends Annotation> T getAnnotation(Class<T> annotationType);
これはジェネリックなメソッドです。次のスニペットで示されているように、これはその型パラメータTの値をその引数から推測し、Tの適切なインスタンスを返します。
Author a = Othello.class.getAnnotation(Author.class);
ジェネリクスが導入される前は、結果を Author にキャストする必要がありました。また、実際のパラメータが Annotation のサブクラスであることをコンパイラにチェックさせる方法もありませんでした。[...]
まあ、私はこの種のものを使う必要はありませんでしたが。どなたかいらっしゃいますか?