获取superclass的super接口的参数class

Getting class of parameter of super interface of superclass

我在获取实现参数化接口的抽象超类的参数时遇到了一些麻烦。

我有这些 类 和界面:

interface Request<T extends Bean>

abstract class ProxyRequest<T extends Bean> implements Request<T>

class FooRequest extends ProxyRequest<Foo>

我想要实现的是从 FooRequest 实例开始 Foo.class

我正在尝试这个,但结果是 T。我做错了什么?

FooRequest request = new FooRequest();
Type[] genericInterfaces = request.getClass().getSuperclass().getGenericInterfaces();
Type[] genericTypes = ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments();
System.out.println(genericTypes[0]);

你这一步走得太远了。您所需要的只是通用超级 class (ProxyRequest<Foo>),您可以通过调用 getGenericSuperclass 获得它,即:

FooRequest request = new FooRequest();
Type[] genericTypes = ((ParameterizedType) request.getClass().getGenericSuperclass())
        .getActualTypeArguments();
System.out.println(genericTypes[0]); // class Foo

通过您的代码片段,您将获得 T 因为:

  1. request.getClass() returns FooRequest.class
  2. .getSuperclass() returns ProxyRequest.class
  3. .getGenericInterfaces() returns 具有 Request<T extends Bean>
  4. 的数组
  5. ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments() returns 以 TypeVariable<...> T 为界的数组。