С тех пор, как были введены дженерики, класс параметризован, поэтому List.class создает класс . Это понятно.
Что я не могу понять, так это как получить экземпляр класса типа, который сам параметризован, то есть класс <список <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);
}
}
Я довольно часто сталкиваюсь с вариантами этой проблемы и до сих пор не знаю, просто ли я что-то упускаю или действительно нет лучшего способа. Спасибо за предложения.