gpt4 book ai didi

Java 集合出现不兼容类型错误

转载 作者:行者123 更新时间:2023-12-01 12:37:50 28 4
gpt4 key购买 nike

所以我有这个函数,但它没有编译。问题是什么?

编译错误是第 4 行:错误:类型不兼容

public List<List<Integer>> myfunc(int[] num) {

List<List<Integer>> r = new ArrayList<ArrayList<Integer>>(); //line 4
return r;
}

谢谢!!

最佳答案

ArrayList<ArrayList<Integer>>不是List<List<Integer>> ,出于同样的原因 ArrayList<Apple>不是List<Fruit> ,并且很容易举一个例子来说明为什么会出现这种情况:

ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>(); 

// This won't work, but imagine that it did...
List<List<Integer>> lists = arrayLists;

// This is fine - a LinkedList<Integer> is a List<Integer>
lists.add(new LinkedList<Integer>());

// This should be fine too
ArrayList<Integer> arrayList = arrayLists.get(0);

那么最后一行发生了什么?不知何故arrayList将引用 LinkedList ,即使其类型是 ArrayList<Integer> 。哎呀!

这证明了为什么如果允许的话代码将不安全 - 这就是为什么它不允许。一个更简单的例子是我之前提到的水果:

List<Apple> apples = new List<Apples>();
// Again, not allowed
List<Fruit> fruit = apples;

// Because this would be odd...
fruit.Add(new Banana());

// It's a Banapple!
Apple apple = apples.get(0);

您可以在这里执行多种操作 - 但最简单的可能就是创建一个 ArrayList<List<Integer>>而不是ArrayList<ArrayList<Integer>> .

关于Java 集合出现不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412341/

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