请在这件事上给予我帮助:
如果是Lion IS-A Animal
并给出了Cage<T>
:
Cage<? extends Animal> c = new Cage<Lion>(); // ok,
但
Set<Cage<? extends Animal>> cc = new HashSet<Cage<Lion>>(); // not ok
我在这里看不到什么?
最佳答案
当将其分配给具有非通配符通用类型Set<T>
的变量(T
)时,被分配的对象必须恰好具有T
作为其通用类型(包括T
,通配符和非通配符的所有通用类型参数)。在您的情况下,T
是Cage<Lion>
,它与Cage<? extends Animal>
的类型不同。
因为Cage<Lion>
可分配给Cage<? extends Animal>
,所以您可以做的是使用通配符类型:
Set<? extends Cage<? extends Animal>> a = new Set<Cage<Lion>>();