Java泛型,绑定不匹配:类型不是绑定参数的有效替代品
我有一个类,它应该返回扩展BaseDto类的对象列表 所以我写了这个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(); 它未编译,但出现以
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