[英]Java generics type parameter confusion
我创建了一个PriorityQueue,其中包含PeekingSortedIterators,如下所示:
PriorityQueue<PeekingSortedIterator<E>> pq= new PriorityQueue<>(iterators.size(), new IteratorComparator<E>());
pq.offer(new PeekingSortedIterator<E>(si));
IteratorComparator比较PeekingSortedIterator基础的值。 我的代码如下:
class IteratorComparator<E extends Comparable<E>> implements Comparator<PeekingSortedIterator<E>>{ // note generics!!!
@Override
public int compare(PeekingSortedIterator<E> o1, PeekingSortedIterator<E> o2) {
return o1.peek().compareTo(o2.peek());
}
}
我的问题如下:
为什么IteratorComparator <E extends Comparable<E>>
的类型参数IteratorComparator <E extends Comparable<E>>
而不是<PeekingSortedIterator<E>>
因为该类在PeekingSortedIterator<E>
而不是直接在E上运行? 我知道,如果这样做,我将需要一种不同的方式来指定E需要扩展Comparable,但我感到困惑,因为使用IteratorComparator<E extends Comparable<E>>
似乎应该将compare方法进行compare(E e1, E e2)
。
为什么用新的IteratorComparator<E>()
创建IteratorComparator实例? 如果我将其修改为new IteratorComparator<PeekingSortedIterator<E>>()
为什么会出现编译时错误( Type mismatch: cannot convert from PriorityQueue<PeekingSortedIterator<PeekingSortedIterator<E>>> to PriorityQueue<PeekingSortedIterator<E>>
new IteratorComparator<PeekingSortedIterator<E>>()
?
提前致谢!
你必须明白, E
在IteratorComparator<E extends Comparable<E>>
是不是一个具体的类型,但类型变量。
线
class IteratorComparator<E extends Comparable<E>>
implements Comparator<PeekingSortedIterator<E>>{
为某个类型E
声明一个IteratorComparator
类,该类型为Comparable<E>
( Comparable<E>
本身可比较,例如String
或Integer
)。 此类实现Comparator<PeekingSortedIterator<E>>
,这意味着它可以比较两个PeekingSortedIterator<E>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.