获取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
因为:
request.getClass()
returns FooRequest.class
.getSuperclass()
returns ProxyRequest.class
.getGenericInterfaces()
returns 具有 Request<T extends Bean>
的数组
((ParameterizedType)genericInterfaces[0]).getActualTypeArguments()
returns 以 TypeVariable<...>
T
为界的数组。
我在获取实现参数化接口的抽象超类的参数时遇到了一些麻烦。
我有这些 类 和界面:
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
因为:
request.getClass()
returnsFooRequest.class
.getSuperclass()
returnsProxyRequest.class
.getGenericInterfaces()
returns 具有Request<T extends Bean>
的数组
((ParameterizedType)genericInterfaces[0]).getActualTypeArguments()
returns 以TypeVariable<...>
T
为界的数组。