Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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泛型,绑定不匹配:类型不是绑定参数的有效替代品_Java_Generics - Fatal编程技术网

Java泛型,绑定不匹配:类型不是绑定参数的有效替代品

Java泛型,绑定不匹配:类型不是绑定参数的有效替代品,java,generics,Java,Generics,我有一个类,它应该返回扩展BaseDto类的对象列表 所以我写了这个 public class Worker<T extends BaseDto> { private T t; ArrayList<T> getList() { .... } } 但当我写作时: Worker<MyDTO> q = new Worker<MyDTO>(); Worker q=新的Worker(); 它未编译,但出现以

我有一个类,它应该返回扩展BaseDto类的对象列表

所以我写了这个

public class Worker<T extends BaseDto> {

   private T t;

     ArrayList<T> getList() {
      ....
     }  
}
但当我写作时:

Worker<MyDTO> q = new Worker<MyDTO>();
Worker q=新的Worker();
它未编译,但出现以下错误:

绑定不匹配:类型MyDTO不是类型Worker的绑定参数的有效替代品

怎么了?

Worker q=new-Worker();//这很好
Worker<MyDTO> q = new Worker<MyDTO>(); // this is fine
你提供的代码应该是可以工作的,我在这里试过,它可以正常编译

但是,这一行不会在Java中编译:

Worker<BaseDto> dto = q; // this is not
Worker dto=q;//这不是

因为Java中的泛型类型是不变的,这意味着两种类型
List
List
不兼容,即使X或Y是彼此不同的子类型。在支持协方差的语言中,这一行可以编译为MyDTO是BaseDto的子类型。

。您确定为
工作者使用了正确的导入吗。你能为我们制作一个MCVE吗?你确定你在所有地方都使用了正确的
Worker
BaseDto
MyDTO
导入吗?可能还有另一个
Worker
不接受
BaseDto
子类作为有界参数你是对的。我在另一个包裹里做了另一个BaseDto
Worker<BaseDto> dto = q; // this is not