[英]Java Generic Collection of Generic Type with Bounded Wildcard
請在這件事上給予我幫助:
如果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<Cage<? extends Animal>> cc = new HashSet<Cage<Lion>>();
cc.add(new Cage<Tiger>()); // legal -- Cage<Tiger> is a Cage<? extends Animal>
Cage<Tiger>
在聲明的范圍內,但不在定義范圍內,所以這會崩潰。
當使用非通配符泛型類型T
分配給變量( Set<T>
)時,所分配的對象必須具有完全T
作為其泛型類型(包括T
所有泛型類型參數,通配符和非通配符)。 在你的情況下, T
是Cage<Lion>
,它與Cage<? extends Animal>
類型不同Cage<? extends Animal>
Cage<? extends Animal>
。
你可以做什么,因為Cage<Lion>
可以分配給Cage<? extends Animal>
Cage<? extends Animal>
,是使用通配符類型:
Set<? extends Cage<? extends Animal>> a = new Set<Cage<Lion>>();
你需要:
Set<? extends List<? extends Number>> cc = new HashSet<ArrayList<Integer>>();
解釋原因...我想回到你的例子的簡單版本:
Number a = new Integer(1); // OK
Set<Number> b = new HashSet<Integer>(); // not OK
這不起作用,因為它會允許
b.add(new Double(3.0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.