Class.getGenericSuperclass
Возвращает тип, представляющий прямой суперкласс сущности (класс, интерфейс, тип примитива или пустота), представленный этим классом.
Если суперкласс является параметризованным типом , возвращаемый объект Type должен точно отражать фактические параметры типа, используемые в исходном коде.
Вы получаете тип суперкласса с этим,В вашем случае вы не определили суперкласс, поэтому он Object
, а Object
не является универсальным классом.
public class Test{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
java.lang.Object
Если вы расширяете параметризованный класс, вы можете получить правильный результат:
public class Test extends Generic<String>{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
class Generic<T> { }
main.Generic <java.lang.String>
Поймите, что вам нужно использовать это внеуниверсальный класс для фактического получения значения.В универсальном классе вы не сможете восстановить тип.
public class Test<U> extends Generic<U>{
public static void main(String args[]) throws IOException {
System.out.println(new Test<Integer>().getClass().getGenericSuperclass().getTypeName());
}
}
class Generic<T> {
}
main.Generic<U>