考虑这个样本:
private <T> void m(Class<? extends T> k, Set<Class<? extends T>> sk) {
Class<?> ku = k;
Set<Class<?>> sku = sk; // <-- Type mismatch: cannot convert from
// Set<Class<? extends T>> to Set<Class<?>>
}
换句话说,我可以将 a 分配给Class<? extends T>
a Class<?>
,T
但不能将 a 分配Set<Class<? extends T>>
给 a Set<Class<?>>
。
它可能与协方差/逆变的一些限制有关,但是什么?
我可以介绍一个演员表:Class.class::cast
会做。但是有没有办法通过微妙的 type-fu 让编译器按照我的意愿弯曲,而不是用演员表猛烈抨击它?