我可以打电话,
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。
答案 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();