为什么这个泛型引用不能指向Java中类似的扩展类?

为什么这个泛型引用不能指向Java中类似的扩展类?,java,generics,Java,Generics,为什么这个泛型引用不能指向Java中类似的扩展类 我在编译时遇到这个错误 HelloWorld.java:5: error: incompatible types Interface<Integer,Object> test =

为什么这个泛型引用不能指向Java中类似的扩展类

我在编译时遇到这个错误

HelloWorld.java:5: error: incompatible types                                                                                                                         
        Interface<Integer,Object> test = new Test();                                                                                                                 
                                         ^                                                                                                                           
  required: Interface<Integer,Object>                                                                                                                                
  found:    Test                                                                                                                                                     
1 error  
您的测试类实现了接口,但您将其声明为接口类型,因此类型不匹配

您可以将引用/分配更改为:

Interface<Integer, Test> test = new Test();
还请注意,您将无法在测试上调用methodtest,因为该方法接受测试参数而不是接口参数

您的测试类实现了接口,但您将其声明为接口类型,因此类型不匹配

您可以将引用/分配更改为:

Interface<Integer, Test> test = new Test();
还请注意,您将无法在测试上调用methodtest,因为该方法接受测试参数而不是接口参数

类测试实现接口,类型声明为接口。不允许此赋值,因为泛型是不变的:

接口既不是接口的子类型,也不是接口的超类型。因此,无法将接口分配给接口

您可以按以下方式更改分配语句以使其正常工作:

接口测试=新测试

类测试实现接口,类型声明为接口。不允许此赋值,因为泛型是不变的:

接口既不是接口的子类型,也不是接口的超类型。因此,无法将接口分配给接口

您可以按以下方式更改分配语句以使其正常工作:


接口测试=新测试

这样想,假设动物类和狗类延伸动物,大象类延伸动物

现在你有了一个狗窝,你可以在里面养狗,列出狗窝,还有 你有一个动物园:列出动物园

狗舍是一种动物园吗?不,您不能将大象添加到犬舍

动物园是一种狗舍吗?不,你们不能保证它只在你们从它那个里取回狗的时候才还给你们


如其他答案所述,两个通用容器之间没有子类型关系,因此赋值失败。

这样想,假设类Animaland和类Dog扩展了Animal,类Elephant扩展了Animal

现在你有了一个狗窝,你可以在里面养狗,列出狗窝,还有 你有一个动物园:列出动物园

狗舍是一种动物园吗?不,您不能将大象添加到犬舍

动物园是一种狗舍吗?不,你们不能保证它只在你们从它那个里取回狗的时候才还给你们


正如其他答案中提到的,两个通用容器之间没有子类型关系,因此赋值失败。

@pdem您指的是什么编辑?我仍然看到不兼容的类型…好吧,我认为接口的声明已经改变了,因为extends对象对行公共接口没有兴趣{谢谢。我看到了99%。我正在尝试使用一个更通用的接口来指向不同的接口,在对象中更改B,并使用相同的类型接口数组…@pdem你指的是什么编辑?我仍然看到不兼容的类型…好的,我认为接口声明已经更改,因为扩展了对象has对行公共接口接口不感兴趣{谢谢。我看到的是99%。我试图做的是使用一个更通用的接口指向不同的接口更改对象中的B,并使用相同的接口类型数组。。。