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>
没有编译器错误时,为什么会出现编译器错误?
答案 0 :(得分:6)
问题不在于您的方法的返回类型,而是Generic Type
绑定到您的类Mixer
。
让我们看看出了什么问题: -
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c)
返回类型 Mixer<? super Dog>
表示您可以返回Mixer
类型的Dog
或super-type
的狗,可能是{{ 1}}。
Animal
因此, //return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
个数据都可以正常运行,因为return
和Animal
都是Object
super-type
}}
但是, Dog
不适合的原因是因为,您已将您的课程声明为: -
first one
因此,您public class Mixer<A extends Animal>
bound
可以与type
课程相关联Mixer
或其Animal
。
现在,由于subtype
不是Object
的子类型,因此您无法创建: -
Animal
因此,您可以创建类的实例,如: -
new Mixer<Object>();