[英]Generic with a lower bounded wildcard <? super Dog>
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
public class Mixer<A extends Animal>{
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c){
//return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
}
}
返回參數是Mixer<? super Dog>
Mixer<? super Dog>
因此如果是使用下界通配符定義的
為什么當我返回Mixer<Object>
並且Mixer<Animal>
沒有編譯器錯誤時出現編譯器錯誤?
問題不在於方法的返回類型,而在於綁定到您的類Mixer
的Generic Type
。
讓我們看看出了什么問題:-
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c)
返回類型Mixer<? super Dog>
Mixer<? super Dog>
意味着,您可以返回Dog
類型的任何Mixer
或Dog
的super-type
,可以是Animal
。
//return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
因此,兩個return
語句都可以正常工作 ,因為Animal
和Object
都是Dog
的super-type
。
但是 , first one
不適合的原因是,您已將類聲明為:-
public class Mixer<A extends Animal>
因此,您已經將可以與Mixer
類關聯的type
bound
到Animal
或其subtype
。 現在,由於Object
不是Animal
的子類型,因此您不能只創建:-
new Mixer<Object>();
因此,您可以創建類的實例,例如:
new Mixer<Animal>(); // OR
new Mixer<Dog>(); // Dog extends Animal // OR
new Mixer<Cat>(); // Cat extends Animal
// **** But NOT like this ******
new Mixer<Object>(); // Object does not extend Animal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.