为什么我不能输入:BlockingQueue<Integer> a = new PriorityQueue<>(2);

Why I can't type: BlockingQueue<Integer> a = new PriorityQueue<>(2);

我在标题中输入的代码无法编译。它说:Cannot infer arguments.

之后我做了 BlockingQueue<Integer> a = new PriorityBlockingQueue<>(2); 编译得很好。我犯了什么错误,下次可以避免吗?

是的,我知道 Queue 接口中的构造函数具有 初始容量 的参数 (2),而 BlockingQueue 中的参数 (2) 表示 最大元素。这与 error?

有什么关系吗

首先,PriorityQueue 不是 BlockingQueue。它无法推断 PriorityQueue<T> 的任何通用参数,因为没有 T 是有效的。话虽这么说,Cannot infer arguments 听起来可能是由于代码中其他地方的此更改的副作用所致。

查看 documentationBlockingQueue,您应该改用“All Known Implementing 类:”下的 类 之一,找到一个带有 BlockingQueues,或者实现你自己的。

您的另一个选择是使用另一种类型的队列,例如 AbstractQueue<Integer> 代替 BlockingQueue<Integer>

标题中的代码无法编译,因为 PriorityQueue 没有实现也没有扩展 BlockingQueue。就像这样做:LinkedList<Integer> ls = new ArrayList<>():,将无法编译。