class Pair<T>
{
T var;
<T> Pair(){}
<T> Pair(Class<T> reflection){
var = reflection.newInstance() ;
}
<T> void func(){
System.out.println(var);
}
}
<T>
в конструкторах и методе определяют другую переменную типа, которая скрывает переменную в классе. Все они называются "T
", но это разные типы.
(те, что в конструкторе с нулевым аргументом и func
все равно не используются).
Удалите эти дополнительные объявления переменных типа.
class Pair<T> {
T var;
Pair() {}
Pair(Class<T> reflection) {
var = reflection.newInstance();
}
void func() {
System.out.println(var);
}
}
Тогда вам просто нужно иметь дело с тем фактом, что не у всех классов есть доступные конструкторы с нулевым аргументом; и что newInstance()
выдает проверенные исключения, которые вам необходимо обработать.
Лучшим подходом было бы предоставить Supplier<T>
:
Pair(Supplier<T> reflection) {
var = reflection.get();
}