Java 如何使用嵌套的泛型参数创建MinMaxPriorityQueue?

Java 如何使用嵌套的泛型参数创建MinMaxPriorityQueue?,java,generics,guava,Java,Generics,Guava,如何使用嵌套的通用参数创建MinMaxPriorityQueue,如: MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap; 但不是嵌套泛型。任何线索都会有帮助。MinMaxPriorityQueue.create对泛型类型必须实现可比较接口进行了限制,即该类型的实例具有自然顺序 我假设AtomicCountHolder没有实现Comparable。在这种情况下,您必须提供一个自定义比较器来定义类型的顺序。比如说,

如何使用嵌套的通用参数创建MinMaxPriorityQueue,如:

MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap;
但不是嵌套泛型。任何线索都会有帮助。

MinMaxPriorityQueue.create对泛型类型必须实现可比较接口进行了限制,即该类型的实例具有自然顺序

我假设AtomicCountHolder没有实现Comparable。在这种情况下,您必须提供一个自定义比较器来定义类型的顺序。比如说,

MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap = MinMaxPriorityQueue.orderedBy(Ordering.natural().onResultOf(someFunction)).create();
这假设您有一个函数,该函数接受AtomicCountHolder并返回可比较的值,如整数。假设E是可比较的,您可以编写一个函数,该函数采用AtomicCountHolderMinMaxPriorityQueue。create对泛型类型必须实现可比较接口施加限制,即该类型的实例具有自然顺序

我假设AtomicCountHolder没有实现Comparable。在这种情况下,您必须提供一个自定义比较器来定义类型的顺序。比如说,

MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap = MinMaxPriorityQueue.orderedBy(Ordering.natural().onResultOf(someFunction)).create();

这假设您有一个函数,该函数接受AtomicCountHolder并返回可比较的值,如整数。假设E是可比较的,您可以编写一个函数,该函数采用AtomicCountHolderEDIT:@sjr的答案是正确的,那么-顺便说一句,您的AtomicCountHolder类需要实现comparable而不是实现comparable

此外,E需要是声明的类型。您需要使用名为E的参数类型在类中定义优先级队列:


编辑:@sjr的答案是正确的,那么-顺便说一句,您的AtomicCountHolder类需要实现Compariable而不是实现Compariable

此外,E需要是声明的类型。您需要使用名为E的参数类型在类中定义优先级队列:


请注意,MinMaxPriorityQueue假定其元素不会以改变其顺序的方式更改。如果AtomicCountHolder类如其名称所示是可变的,则可能有不正确的行为

请注意,MinMaxPriorityQueue假定其元素不会以改变其顺序的方式更改。如果AtomicCountHolder类如其名称所示是可变的,则可能有不正确的行为

AtomicCountHolder扩展了AtomicInteger,因此它应该实现可比性。@Hein:AtomicInteger不可比。AtomicCountHolder扩展了AtomicInteger,因此它应该实现可比性。@Hein:AtomicInteger不可比。这第一个原因是您绘制的草图与我在顶级类中声明的参数类型E完全相同,如示例所示,但是您的MinMaxPriorityQueue.create方法不起作用。它给出以下结果:绑定不匹配:MinMaxPriorityQueue类型的泛型方法create不适用于参数。推断的类型Example.AtomicCountHolder不是有界参数的有效替代品。请参见我的编辑-基本上,AtomicCountHolder需要具有可比性,而不像@sjr指出的那样。Ups!谢谢看来这会解决我的问题。谢谢我将用一个更具体的示例进行说明。首先,假设您的草图与我在顶级类(如示例)中声明的参数类型E完全相同,但您的MinMaxPriorityQueue.create方法不起作用。它给出以下结果:绑定不匹配:MinMaxPriorityQueue类型的泛型方法create不适用于参数。推断的类型Example.AtomicCountHolder不是有界参数的有效替代品。请参见我的编辑-基本上,AtomicCountHolder需要具有可比性,而不像@sjr指出的那样。Ups!谢谢看来这会解决我的问题。谢谢我将用一个更具体的例子进行说明。
public class Example<E> {
  MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap =
      MinMaxPriorityQueue.create();
}
MinMaxPriorityQueue<AtomicCountHolder<Integer>> sortedHeap =
    MinMaxPriorityQueue.create();
MinMaxPriorityQueue<AtomicCountHolder<?>> sortedHeap =
    MinMaxPriorityQueue.create();