class Super<T> {}
class Child<A, B> extends Super<B> {}
class Code {
public void method(Child<String, Integer> child) {}
}
我可以使用反射来获取参数类型:
ParameterizedType ptype = (ParameterizedType) Code.class.getMethod("method").getGenericParameterTypes()[0]
但是如何获得ptype的通用超类(不仅意味着Super.class
,还包含类型参数Integer
)
我的用例是我想使用反射来确定方法的一个参数是否是MyClass对象的集合(我没有要检查的实际参数实例)
答案 0 :(得分:1)
答案 1 :(得分:1)
嗯,从上面的例子中你可以做到。因为您可以提取方法参数(Child)的第二个类型参数(Integer)的实际类型。
Method method = Code.class.getMethod("method", Child.class);
ParameterizedType parameterType = (ParameterizedType) method.getGenericParameterTypes()[0];
Type secondType = parameterType.getActualTypeArguments()[1];
System.out.println(secondType == Integer.class);
返回true
。
答案 2 :(得分:0)
据我所知,你不能这样做。
您可以使用Child
提取String
(Integer
和getActualTypeArguments()
)的类型参数,但无法将它们与T
Super<T>
相关联}。
您也可以从T
中提取class Child extends Super<Integer>
,但事实并非如此。
这意味着,如果您想在参数中找到Collection<MyClass>
,只有method(Collection<MyClass>)
,而不是method(ArrayList<MyClass>)
或其他内容,您才能这样做。