我从以下代码的第二条语句中得到了不兼容类型的错误:无法推断类型变量E(实际参数列表和形式参数列表的长度不同)
,
Deque<TreeNode>[] stacks = new Deque[2];
Arrays.set(stacks, LinkedList::new);
但是,用 ArrayDeque 替换 LinkedList 修复了错误,
Arrays.set(stacks, ArrayDeque::new);
LinkedList
和 ArrayDeque
都实现了 Deque
接口(interface)。我很困惑为什么它适用于 ArrayDeque 但不适用于 LinkedList?
最佳答案
区别在于您传递的构造函数:
public LinkedList(Collection<? extends E> c);
public LinkedList();
public ArrayDeque(int numElements);
展开后你得到:
Arrays.setAll(stacks, index -> new LinkedList<TreeNode>(index));
Arrays.setAll(stacks, index -> new ArrayDeque<>(index));
其中LinkedList
没有采用int索引
的构造函数。
要解决您的问题,只需编写(index
是数组中的索引):
Arrays.setAll(stacks, index -> new LinkedList<TreeNode>());
关于java - "incompatible types: cannot infer type-variable"为链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58505790/