Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带下界通配符的泛型<;?超级狗>; 类动物{} 类狗扩展动物{} 类Cat扩展了动物{} 公共类混音器{ 公共混合器_Java_Generics_Wildcard_Bounded Wildcard - Fatal编程技术网

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