繁体   English   中英

Java泛型类型参数混乱

[英]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());
    } 
 }

我的问题如下:

  1. 为什么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)

  2. 为什么用新的IteratorComparator<E>()创建IteratorComparator实例? 如果我将其修改为new IteratorComparator<PeekingSortedIterator<E>>()为什么会出现编译时错误( Type mismatch: cannot convert from PriorityQueue<PeekingSortedIterator<PeekingSortedIterator<E>>> to PriorityQueue<PeekingSortedIterator<E>> new IteratorComparator<PeekingSortedIterator<E>>()

提前致谢!

你必须明白, EIteratorComparator<E extends Comparable<E>>是不是一个具体的类型,但类型变量。

线

class IteratorComparator<E extends Comparable<E>> 
    implements Comparator<PeekingSortedIterator<E>>{

为某个类型E声明一个IteratorComparator类,该类型为Comparable<E>Comparable<E>本身可比较,例如StringInteger )。 此类实现Comparator<PeekingSortedIterator<E>> ,这意味着它可以比较两个PeekingSortedIterator<E>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM