我有一个具有以下签名的方法:
<T> T getBody(Class<T> type)
将 body 对象作为指定类型返回。如何调用它以返回类型的对象
Iterable<OProperty<?>>
我在泛型之前做了很多 Java,所以我的程序员 fu 在这些情况下有点生疏了 :)
这不能用Class<T>
. 唯一允许T
的是原始类型,因为这是Class
可以参数化的所有类型(您可以拥有Class<List>
但不能Class<List<String>>
)。
Class
和泛型不能很好地协同工作。Class
用于表示具体的运行时类型,而泛型是在编译时。我们希望拥有Class<Iterable>
andClass<Iterable<Something>>
等,但在运行时只有一个这样的对象。没有任何类型适合所有这些用途。Java 选择了Class<Iterable>
.
您可以使用一些可疑的未经检查的强制转换来获得正确的类型来传递给它:
getBody(Class<Iterable<OProperty<?>>>)(Class<?>)Iterable.class)