这是什么意思<e,p =“”extends =“”可比<?=“”super =“”p =“”>&gt;?

时间:2017-07-20 05:06:35

标签: java generics

无论如何,我已经获得了一个类和一个PriorityQueueInterface来实现一个Linked Node PriorityQueue。但是,我在掌握班级类型时遇到了麻烦。 这是Entry类

我不知道如何在不知道这意味着什么的情况下开始作业。

public class Entry<E, P extends Comparable<? super P>>
         implements Comparable<Entry<E, P>>
{
    private E theItem; 
    private P thePriority; 

    public Entry(E item, P priority)
    {
        theItem = item; 
        thePriority = priority;
    } 

    public E getItem()
    {
        return theItem;
    } 

    public P getPriority()
    {
        return thePriority;
    } 

    public int compareTo(Entry<E, P> other)
    {
        return thePriority.compareTo(other.thePriority);
    }

    public String toString()
    {
        return "item/priority <" + theItem + ", " + thePriority + ">";
    }
} 

这是界面

public interface PriorityQueueInterface<T extends Comparable<? super T> > {

/** Adds a new entry to this priority queue. 
 * @param newEntry An object to be added */ 
 public void add(T newEntry); 

 /** Removes and returns the entry having the highest priority. 
  * @return Either the object having the highest priority or 
  *         if, the priority queue is empty before the operation, null. */ 
  public T remove(); 

  /** Retrieves the entry having the highest priority.
  @return  Either the object having the highest priority or,
           if the priority queue is empty, null. */
  public T peek(); 

  /** Detects whether this priority queue is empty.
  @return  True if the priority queue is empty, or false otherwise. */
  public boolean isEmpty(); 

   /** Gets the size of this priority queue.
  @return  The number of entries currently in the priority queue. */
  public int getSize(); 

  /** Removes all entries from this priority queue. */
   public void clear();

}// End of PriorityQueueInterface

2 个答案:

答案 0 :(得分:1)

让我们打破这个:Entry<E, P extends Comparable<? super P>> implements Comparable<Entry<E, P>>。认为Entry是一种类型(比如A)。因此,该声明转换为A implements Comparable<A>。这意味着,这种类型可以将自己与同类型的其他对象进行比较。

现在让我们走得更远。 Entry有两个参数。 EP。容易。

更进一步,P extends Comparable意味着P可以将自己与某些东西进行比较。 P类型可以与最内层的<> ? super P进行比较。这意味着P可以将自身与P类型的对象或它的超级类比较。

将所有内容放在一起,您有一个两个参数的条目,它们应该能够将自己与相同参数的其他条目进行比较。其中一个参数是E。另一个是PP应该能够将自己与任何超级对象进行比较。

如果您想了解何时撰写super以及何时撰写extends,有很多问题可以解释。

答案 1 :(得分:0)

Entry中P的具体类必须实现Comparable。由于Comparable也是通用的,因此声明强制P必须使用Comparable部分对P实施<? super P>