Параметр инстанцирования дженерика

Я изучаю общий Java, я цепляюсь за какую-то проблему, создавая экземпляр типа, полученный от общих параметров (это возможно в C#, хотя)

class Person { 
    public static <T> T say() {
        return new T; // this has error
    }
}

Я попытался это: дженерики в Java-создание экземпляра T

public static <T> T say(Class<?> t) {
    return t.newInstance();
}

ошибка:

incompatible types
found   : capture#426 of ?
        required: T

это не сработает. Следующее выглядит нормально, но это влечет за собой создание экземпляра некоторого класса, не может использоваться в статическом методе:создание экземпляров дженериков введите java

public class Abc<T>
 {

    public T getInstanceOfT(Class<T> aClass)
    {
       return aClass.newInstance();
    }      

} 

это стирания типа Java люди говорят? Это ограничение стирания типа?

что обойти эту проблему?

1 ответов


Вы были очень близки. Вам нужно заменить Class<?> (что означает "класс любого типа") с Class<T> (что означает "класс типа T"):

public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException {
    return t.newInstance();
}