簡體   English   中英

具有低界通配符的泛型<? super Dog>

[英]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>沒有編譯器錯誤時出現編譯器錯誤?

問題不在於方法的返回類型,而在於綁定到您的類MixerGeneric Type

讓我們看看出了什么問題:-

public <C extends Cat> Mixer<? super Dog> useMe(A a, C c)

返回類型Mixer<? super Dog> Mixer<? super Dog>意味着,您可以返回Dog類型的任何MixerDogsuper-type ,可以是Animal

    //return new Mixer<Object>();//KO
    return new Mixer<Animal>(); //OK

因此,兩個return語句都可以正常工作 ,因為AnimalObject都是Dogsuper-type

但是first one不適合的原因是,您已將類聲明為:-

public class Mixer<A extends Animal>

因此,您已經將可以與Mixer類關聯的type boundAnimal或其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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM