为什么我不能输入: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
听起来可能是由于代码中其他地方的此更改的副作用所致。
查看 documentation 的 BlockingQueue
,您应该改用“All Known Implementing 类:”下的 类 之一,找到一个带有 BlockingQueue
s,或者实现你自己的。
您的另一个选择是使用另一种类型的队列,例如 AbstractQueue<Integer>
代替 BlockingQueue<Integer>
。
标题中的代码无法编译,因为 PriorityQueue
没有实现也没有扩展 BlockingQueue
。就像这样做:LinkedList<Integer> ls = new ArrayList<>():
,将无法编译。
我在标题中输入的代码无法编译。它说:Cannot infer arguments
.
之后我做了 BlockingQueue<Integer> a = new PriorityBlockingQueue<>(2);
编译得很好。我犯了什么错误,下次可以避免吗?
是的,我知道 Queue
接口中的构造函数具有 初始容量 的参数 (2),而 BlockingQueue
中的参数 (2) 表示 最大元素。这与 error?
首先,PriorityQueue
不是 BlockingQueue
。它无法推断 PriorityQueue<T>
的任何通用参数,因为没有 T
是有效的。话虽这么说,Cannot infer arguments
听起来可能是由于代码中其他地方的此更改的副作用所致。
查看 documentation 的 BlockingQueue
,您应该改用“All Known Implementing 类:”下的 类 之一,找到一个带有 BlockingQueue
s,或者实现你自己的。
您的另一个选择是使用另一种类型的队列,例如 AbstractQueue<Integer>
代替 BlockingQueue<Integer>
。
标题中的代码无法编译,因为 PriorityQueue
没有实现也没有扩展 BlockingQueue
。就像这样做:LinkedList<Integer> ls = new ArrayList<>():
,将无法编译。