ar_*_*ar_ 7 java generics collections bounded-wildcard
请在这件事上给予我帮助:
如果Lion IS-A Animal给定Cage<T>:
Cage<? extends Animal> c = new Cage<Lion>(); // ok,
Run Code Online (Sandbox Code Playgroud)
但
Set<Cage<? extends Animal>> cc = new HashSet<Cage<Lion>>(); // not ok
Run Code Online (Sandbox Code Playgroud)
我在这里看不到什么?
这是错误的,因为如果它被允许,那么这将是合法的:
Set<Cage<? extends Animal>> cc = new HashSet<Cage<Lion>>();
cc.add(new Cage<Tiger>()); // legal -- Cage<Tiger> is a Cage<? extends Animal>
Run Code Online (Sandbox Code Playgroud)
Cage<Tiger> 是在声明的范围内,但不是定义,所以这会崩溃.
Set<T>使用非通配符泛型类型分配给variable()时T,所分配的对象必须T与其泛型类型完全相同(包括T通配符和非通配符的所有泛型类型参数).你的情况T是Cage<Lion>,这是不一样的类型Cage<? extends Animal>.
你能做什么,因为Cage<Lion>可以分配Cage<? extends Animal>,是使用通配符类型:
Set<? extends Cage<? extends Animal>> a = new Set<Cage<Lion>>();
Run Code Online (Sandbox Code Playgroud)