如何使用嵌套的通用参数创建MinMaxPriorityQueue
,如:
MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap;
我尝试过使用静态create()
方法可以想到的各种变体,而构建器无济于事。它适用于
MinMaxPriorityQueue<Integer> s = MinMaxPriorityQueue. <Integer>create();
但不是嵌套泛型。任何线索都会有所帮助。
答案 0 :(得分:7)
MinMaxPriorityQueue.create()
强制限制泛型类型必须实现Comparable
接口,即该类型的实例有自然排序。
我认为AtomicCountHolder<E>
没有实现Comparable
。在这种情况下,您必须提供定义类型排序的自定义Comparator
。例如,
MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap = MinMaxPriorityQueue.orderedBy(Ordering.natural().onResultOf(someFunction)).create();
这假设您有Function
AtomicCountHolder<E>
并返回Comparable
的内容,如Integer
。假设E
具有可比性,您可以编写一个Function
来获取AtomicCountHolder<E extends Comparable<? super E>>
并返回AtomicCountHolder
所指的任何内容。
什么是AtomicCountHolder
btw?是AtomicInteger
吗?
答案 1 :(得分:0)
AtomicCountHolder<E>
课程需要实施Comparable<AtomicCountHolder<E>>
。顺便说一下,AtomicInteger
没有实现Comparable<AtomicInteger>
。
此外,E
必须是声明的类型。您需要在具有名为E
的参数类型的类中定义优先级队列:
public class Example<E> {
MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap =
MinMaxPriorityQueue.create();
}
...或者您需要在其位置指定现有类型:
MinMaxPriorityQueue<AtomicCountHolder<Integer>> sortedHeap =
MinMaxPriorityQueue.create();
您也可以像往常一样使用通配符(假设AtomicCountHolder
的参数类型没有约束):
MinMaxPriorityQueue<AtomicCountHolder<?>> sortedHeap =
MinMaxPriorityQueue.create();
答案 2 :(得分:0)
请注意,MinMaxPriorityQueue假定其元素不会以改变其排序的方式更改。如果AtomicCountHolder类是可变的,顾名思义,您的行为可能不正确。