我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);
Run Code Online (Sandbox Code Playgroud)
但是,用 ArrayDeque 替换 LinkedList 修复了错误,
Arrays.set(stacks, ArrayDeque::new);
Run Code Online (Sandbox Code Playgroud)
无论LinkedList和ArrayDeque实现Deque接口。我很困惑为什么它适用于ArrayDeque但不适用于LinkedList?
不同之处在于您传递的构造函数:
public LinkedList(Collection<? extends E> c);
public LinkedList();
Run Code Online (Sandbox Code Playgroud)
public ArrayDeque(int numElements);
Run Code Online (Sandbox Code Playgroud)
展开后得到:
Arrays.setAll(stacks, index -> new LinkedList<TreeNode>(index));
Run Code Online (Sandbox Code Playgroud)
Arrays.setAll(stacks, index -> new ArrayDeque<>(index));
Run Code Online (Sandbox Code Playgroud)
哪里LinkedList没有构造函数带int index。
要解决您的问题,只需编写(index数组中的索引):
Arrays.setAll(stacks, index -> new LinkedList<TreeNode>());
Run Code Online (Sandbox Code Playgroud)