我在以下代码的第二条语句中出现了incompatible type: cannot infer type-variable(s) E (actual and formal argument lists differ in length)
错误,
Deque<TreeNode>[] stacks = new Deque[2];
Arrays.set(stacks, LinkedList::new);
但是,用ArrayDeque替换LinkedList可以修复错误,
Arrays.set(stacks, ArrayDeque::new);
LinkedList
和ArrayDeque
都实现Deque
接口。我很困惑为什么它适用于ArrayDeque
而不适用于LinkedList
?
答案 0 :(得分:4)
不同之处在于您传递的构造函数:
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
的地方。
要解决您的问题,只需编写(index
是数组中的索引):
Arrays.setAll(stacks, index -> new LinkedList<TreeNode>());