gpt4 book ai didi

Java 泛型编译错误

转载 作者:行者123 更新时间:2023-12-01 06:56:54 26 4
gpt4 key购买 nike

public class IRock
{
public List<IMineral> getMinerals();
}

public class IMineral { ... }

public class SedimentaryMineral implements IMineral { ... }

public class SedimentaryRock implements IRock
{
private List<SedimentaryMineral> minerals;

@Override
public List<SedimentaryMineral> getMinerals()
{
return minerals;
}
}

出现编译器错误:

Type mismatch: cannot convert from List<SedimentaryMineral> to List<IMineral>.

我知道我无法将 impl 转换回其 API 接口(interface)(因为 API 不仅仅是 API)。但我很困惑为什么会出现编译器错误! Java 难道不应该尊重 SedimentaryMineralIMineral 的实现并允许这样做吗?!?

除了解释为什么我会遇到这个编译器错误之外,也许有人可以指出为什么我在这里的方法是“糟糕的设计”以及我应该采取什么措施来纠正它。提前致谢!

最佳答案

想象一下如果编译了:

List<SedementaryMineral> list = new ArrayList<>();
list.put(new SedimentaryMineral());

List<IMineral> mineralList = list;
mineralList.add(new NonSedimentaryMineral());

for(SedementaryMineral m : list) {
System.out.println(m); // what happens when it gets to the NonSedimentaryMineral?
}

你那里有一个严重的问题。

你可以做的是:List<? extends IMineral> mienralList = list

关于Java 泛型编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10075805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com