gpt4 book ai didi

java - 具有下界通配符的泛型

转载 作者:行者123 更新时间:2023-11-30 05:51:18 28 4
gpt4 key购买 nike

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<Object> 时为什么会出现编译器错误Mixer<Animal> 没有编译器错误?

最佳答案

问题不在于您的方法的返回类型,而在于 Generic Type绑定(bind)到你的类(class)Mixer .

让我们看看出了什么问题:-

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

返回类型 Mixer<? super Dog> 意味着,您可以返回任何 Mixer类型 Dogsuper-type狗的,可能是Animal .

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

所以,return语句会工作得很好,因为,AnimalObjectsuper-typeDog .

但是first one的原因不适合是因为,您已将您的类(class)声明为:-

public class Mixer<A extends Animal>

所以,你有 bound你的type可以与 Mixer 相关联类 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

关于java - 具有下界通配符的泛型 <? super 狗>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893022/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com