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

问题描述

我在标题中输入的代码无法编译。它说:system("rm DIRECTORY/*.html;rm DIRECTORY/*.png")

之后,我做了Cannot infer arguments,它可以很好地进行编译。我的错误是什么,所以我下次可以避免吗?

是的,我知道BlockingQueue<Integer> a = new PriorityBlockingQueue<>(2);界面中的构造函数具有用于初始容量的参数(2),而在Queue中,参数(2)表示最大元素。这与错误有关吗?

解决方法

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

查看documentation中的BlockingQueue,您应该改用“所有已知的实现类:”下的类之一,找到带有BlockingQueue s的库,或者实现自己的库

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

,

由于PriorityQueue未实现也不扩展BlockingQueue,因此标题中的代码无法编译。就像这样做:LinkedList<Integer> ls = new ArrayList<>():,它将不会编译。