gpt4 book ai didi

java - 使用接口(interface)时列表转换错误

转载 作者:行者123 更新时间:2023-12-02 13:40:09 26 4
gpt4 key购买 nike

我有一个方法 List作为参数。

private static void setData(List<IData> list) {

}

interface IData

public interface IData {
int getData();
}

我有一个名为 Data 的类其中implements IData的界面

public class Data implements IData{

@Override
public int getData() {
// TODO Auto-generated method stub
return 0;
}

}

问题是当我使用List的参数来调用方法时,它无法编译。

public class Test {
public static void main(String[] args) {
List<Data> temp = new ArrayList<>();
for (int i = 0; i < 5; i++) {
temp.add(new Data());
}
setData(temp);

List<IData> temp2 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
temp2.add(new Data());
}
setData(temp2);
}

private static void setData(List<IData> list) {

}
}

setData(temp)是错误。 setData(temp2)没问题。两个列表的内容相同。我不明白。

最佳答案

您只能将参数的子类型作为参数放入,因为子类型建立了is-a关系:子类型的实例is-an也是父类(super class)型的实例。列表的内容是什么并不重要,重要的是列表类型是什么(相对于预期的参数类型)。你的方法setData(List<IData> list)需要一个参数 is-a List<IData> ,但您试图将 List<Data> 传递给它,它不是 List<IData> 的子类型。因此编译器无法接受该代码。

泛型、继承和子类型是 Java 教程“泛型、继承和子类型”部分的主题,我建议您注意该主题,作为对该主题的很好的介绍。通过仔细阅读 Angelika Langer 的有关泛型的优秀网站,您将获得更深入的知识,我也建议您关注该网站。

关于java - 使用接口(interface)时列表转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777621/

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