请在这件事上给予我帮助:

如果是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,通配符和非通配符的所有通用类型参数)。在您的情况下,TCage<Lion>,它与Cage<? extends Animal>的类型不同。

因为Cage<Lion>可分配给Cage<? extends Animal>,所以您可以做的是使用通配符类型:

Set<? extends Cage<? extends Animal>> a = new Set<Cage<Lion>>();

09-05 02:19