2013-07-05 46 views
2

给定java.lang.reflect.Method什么是<?> #getTypeParameters()类的返回类型?

我可以打电话,

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。

回答

2

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

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

这里是解释相同的Java文档参考。

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

,而这将工作

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

你应该尝试

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

取决于你需要什么,你也可以使用

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