ジェネリックが導入されてから、Class はパラメータ化され、List.class は Class<List> を生成します。これは明らかです。
私が理解できないのは、それ自体がパラメータ化されたタイプの Class のインスタンス、つまり Class<List<String>> を取得する方法です。このスニペットのように:
public class GenTest {
static <T> T instantiate(Class<T> clazz) throws Exception {
return clazz.newInstance();
}
public static void main(String[] args) throws Exception {
// Is there a way to avoid waring on the line below
// without using @SuppressWarnings("unchecked")?
// ArrayList.class is Class<ArrayList>, but I would like to
// pass in Class<ArrayList<String>>
ArrayList<String> l = GenTest.instantiate(ArrayList.class);
}
}
私はこの問題のバリエーションにかなり頻繁に出くわしますが、何かを見落としているだけなのか、それとも本当に良い方法がないのか、まだわかりません。提案をありがとう。