2

与给定的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。

4

3 回答 3

2

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

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

这是解释相同的java doc参考。

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

虽然这会起作用

final TypeVariable<?>[] typeParameters =returnType.getTypeParameters();
于 2013-07-05T04:39:42.740 回答
1

你应该试试

final Class<?> returnType = method.getReturnType();
final TypeVariable<?>[] typeParameters =  returnType.getTypeParameters();  
if (types.length > 0){  
   // do something with every type...
}
于 2013-07-05T04:50:19.040 回答
1

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

final TypeVariable<? extends Class<?>>[] typeParameters = returnType.getTypeParameters();
于 2013-07-07T06:56:50.480 回答