我在获取实现参数化接口的抽象超类的参数时遇到了一些麻烦。
我有这些类和接口:
interface Request<T extends Bean>
abstract class ProxyRequest<T extends Bean> implements Request<T>
class FooRequest extends ProxyRequest<Foo>
我想要实现的是从Foo.class
实例开始FooRequest
。
我正在尝试这个,但结果是T
。我做错了什么?
FooRequest request = new FooRequest();
Type[] genericInterfaces = request.getClass().getSuperclass().getGenericInterfaces();
Type[] genericTypes = ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments();
System.out.println(genericTypes[0]);
答案 0 :(得分:1)
你迈出这一步太过分了。您所需要的只是通用超类(ProxyRequest<Foo>
),您可以通过调用getGenericSuperclass
来获得,即:
FooRequest request = new FooRequest();
Type[] genericTypes = ((ParameterizedType) request.getClass().getGenericSuperclass())
.getActualTypeArguments();
System.out.println(genericTypes[0]); // class Foo
使用您的代码段,您将获得T
,因为:
request.getClass()
返回FooRequest.class
.getSuperclass()
返回ProxyRequest.class
.getGenericInterfaces()
返回包含Request<T extends Bean>
((ParameterizedType)genericInterfaces[0]).getActualTypeArguments()
返回一个包含TypeVariable<...>
T
的数组,其中Bean
为约束。