Class <! - ? - > #getTypeParameters()的返回类型是什么?

时间:2013-07-05 04:24:51

标签: java class generics type-variables

给定java.lang.reflect.Method

我可以打电话,

final Class<?> returnType = method.getReturnType();

但是当我尝试使用以下语句调用getTypeParameters()时,

final TypeVariable<Class<?>>[] typeParameters = returnType.getTypeParameters();

我遇到了编译错误。

required: java.lang.reflect.TypeVariable<java.lang.Class<?>>[]
found:    java.lang.reflect.TypeVariable<java.lang.Class<capture#1 of ?>>[]

这句话有什么不对?我只是跟着apidocs。

3 个答案:

答案 0 :(得分:2)

代码正在尝试执行安全操作。

需要创建Helper方法,以便可以通过类型推断捕获通配符。 编译器无法确认插入到列表中的对象的类型,并产生错误。发生此类错误时,通常意味着编译器认为您为变量分配了错误的类型。由于这个原因,泛型被添加到Java语言中 - 在编译时强制类型安全。

这是解释相同的java doc refrence。

http://docs.oracle.com/javase/tutorial/java/generics/capture.html

虽然这会起作用

final TypeVariable<?>[] typeParameters =returnType.getTypeParameters();

答案 1 :(得分:1)

你应该试试

final Class<?> returnType = method.getReturnType();
final TypeVariable<?>[] typeParameters =  returnType.getTypeParameters();  
if (types.length > 0){  
   // do something with every type...
}

答案 2 :(得分:1)

根据您的需要,您也可以使用

final TypeVariable<? extends Class<?>>[] typeParameters = returnType.getTypeParameters();