Java 带下界通配符的泛型<;?超级狗>; 类动物{} 类狗扩展动物{} 类Cat扩展了动物{} 公共类混音器{ 公共混合器
问题不在于方法的返回类型,而是绑定到类Java 带下界通配符的泛型<;?超级狗>; 类动物{} 类狗扩展动物{} 类Cat扩展了动物{} 公共类混音器{ 公共混合器,java,generics,wildcard,bounded-wildcard,Java,Generics,Wildcard,Bounded Wildcard,问题不在于方法的返回类型,而是绑定到类混合器的泛型类型 让我们看看哪里出了问题:- 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
混合器的泛型类型
让我们看看哪里出了问题:-
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
}
}
因此,返回
状态都可以很好地工作,因为动物
和对象
都是狗
的超级类型
但是,第一个
不符合的原因是,您已经声明您的类为:-
//return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
因此,您可以创建类的实例,如:-
new Mixer<Object>();
new Mixer();//或
新建混合器();//狗扩展动物//或
新的混合器();//猫扩展了动物
//****但不是这样******
new Mixer();//对象不扩展Animal
你能重新表述你的问题吗?你问的不清楚。@RohitJain:他说返回Mixer
是允许的,但不能返回Mixer
为什么?我已经得到了这本书的答案,但它并没有消除我的疑问。它说,因为方法的返回类型是Mixer
public class Mixer<A extends 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