代码之家  ›  专栏  ›  技术社区  ›  balsick

超类超接口参数类的获取

  •  1
  • balsick  · 技术社区  · 8 年前

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

    我有这些类和接口:

    interface Request<T extends Bean>

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

    class FooRequest extends ProxyRequest<Foo>

    我想要达到的是 Foo.class 从a开始 FooRequest 例子

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

    FooRequest request = new FooRequest();
    Type[] genericInterfaces = request.getClass().getSuperclass().getGenericInterfaces();
    Type[] genericTypes = ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments();
    System.out.println(genericTypes[0]);
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Jorn Vernee    8 年前

    你走得太远了。您所需要的只是泛型超类( 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() 退货 FooRequest.class
    2. .getSuperclass() 退货 ProxyRequest.class
    3. .getGenericInterfaces() 返回具有 Request<T extends Bean>
    4. ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments() 返回具有 TypeVariable<...> T 具有 Bean 作为约束。