我的班级基本设置存在一些问题。
背景:
我正在编写一个基于二叉树实现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
的功能带入课堂的。
如果您需要进一步的信息来澄清请问。
提前致谢。
答案 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> {
是要存储的项目的类型,E
是C
的类型(不强制它为Comparator
。
对于DefaultComparator
:
Comparator