Java:设置类的基本问题

时间:2014-05-05 17:10:14

标签: java constructor comparator

我的班级基本设置存在一些问题。

背景: 我正在编写一个基于二叉树实现MinHeap的类。 我有一个班级BinaryTree, BinaryTreeNode, MinTreeHeap, DefaultComparator和一个界面PriorityQueue MinTreeHeap是我写的课程。它实现了PriorityQueue并做了其他一些事情 DefaultComparator实现了比较两个节点的功能。

给定的测试程序使用以下内容调用MinTreeHeap

MinTreeHeap<Value> heap = new MinTreeHeap<>( new DefaultComparator<Value>() );

我的问题是MinTreeHeap的类声明。到目前为止,我有以下内容。

import pa01.bintree.BinaryTree;
import pa01.bintree.BinaryTreeNode;
import java.util.Comparator;
import java.util.HashMap;
import java.util.NoSuchElementException;

public class MinTreeHeap<T extends DefaultComparator<T>> extends BinaryTree 
    implements PriorityQueue<T> {

  /** The actual heap. */
  private final BinaryTree<T> heap;

  /**
   * Default Constructor
   */
  public MinTreeHeap() {
    super();
    last = null;
  }

  public MinTreeHeap( T data ){
    super(data);
    last = heap.getRoot();
  }

我在第public class MinTree...行收到错误 错误:

Bound mismatch: The type T is not a valid substitute for the bounded parameter
<T extends Comparable<T>> of the type DefaultComparator<T>

我不知道我是如何将DefaultComparator的功能带入课堂的。

如果您需要进一步的信息来澄清请问。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您将{{1>}应存储的数据的类型与比较器的类型相混淆:

MinTreeHeap

public class MinTreeHeap<T extends DefaultComparator<T>> extends BinaryTree // ↑ ↑ // | the type to compare // A type extending the Comparator 同时是T Comparator应该比较的项目的类型,没有任何意义。

并且,Comparator期望DefaultComparator类型变量无法满足的Comparable类型。

你最想要的是这样的事情:

T

其中public class MinTreeHeap<E, C extends Comparator<E>> extends BinaryTree implements PriorityQueue<E> { 是要存储的项目的类型,EC的类型(不强制它为Comparator

对于DefaultComparator

的类型,也可以不使用类型变量
Comparator
相关问题