从超类型类中获取泛型参数

sbl*_*ndy 3 java reflection

假设我有一个像这样的父接口/类

interface Parent<T> {}
Run Code Online (Sandbox Code Playgroud)

以及一些修复泛型类型的实现接口.

interface Child extends Parent<Type> {}
Run Code Online (Sandbox Code Playgroud)

如果我有对象,我可以使用反射来获取Class表示的实例.像这样的东西:TClassChild

<T, I extends Parent<T>> I create(Class<I> type) {
    Class<T> tType = ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

目前我已tType作为参数传递,但如果可以,我想简化一些事情.

Kir*_*oll 6

是的,尽管其他人已经说过,如果您可以访问子类的对象,可以使用此信息Class.你需要getGenericSuperclass一起使用getActualTypeArguments.

ParameterizedType superClass = (ParameterizedType)childClass.getGenericSuperclass();
System.out.println(superClass.getActualTypeArguments()[0]);
Run Code Online (Sandbox Code Playgroud)

在您的示例中,"actual"类型参数应返回Classfor Type.