Java:设置类的基本问题
我的班级的基本设置有一些问题 背景: 我正在编写一个基于二叉树实现MinHeap的类。 我有一个类Java:设置类的基本问题,java,constructor,comparator,Java,Constructor,Comparator,我的班级的基本设置有一些问题 背景: 我正在编写一个基于二叉树实现MinHeap的类。 我有一个类BinaryTree、BinaryTreeNode、MinTreeHeap、DefaultComparator和一个接口PriorityQueue MinTreeHeap是我正在编写的类。它实现了PriorityQueue,并执行一些其他操作。 DefaultComparator实现比较两个节点的功能 给定的测试程序调用MinTreeHeap,如下所示: MinTreeHeap<Value&g
BinaryTree、BinaryTreeNode、MinTreeHeap、DefaultComparator
和一个接口PriorityQueue
MinTreeHeap
是我正在编写的类。它实现了PriorityQueue
,并执行一些其他操作。DefaultComparator
实现比较两个节点的功能
给定的测试程序调用MinTreeHeap
,如下所示:
MinTreeHeap<Value> heap = new MinTreeHeap<>( new DefaultComparator<Value>() );
我在第行的公共类MinTree中遇到错误…
错误:
绑定不匹配:类型T不是绑定参数的有效替代品
DefaultComparator类型的
我也不知道我是如何将DefaultComparator
的功能引入到课堂中的
如果您需要进一步的信息来澄清,请询问
提前感谢。您混淆了您的
MinTreeHeap
应该存储的数据类型与比较器的类型:
其中,E
是要存储的项的类型,C
是比较器的类型(不强制它是默认比较器
)
比较器的类型也可以不使用类型变量:
public class MinTreeHeap<E> extends BinaryTree implements PriorityQueue<E> {
public MinTreeHeap(Comparator<? super E> comp) {
// store comp in a field of type Comparator<? super E>
// or pass it over to other implementation code
…
}
…
public类MinTreeHeap扩展BinaryTree实现PriorityQueue{
public MinTreeHeap(Comparator您使用的JDK版本是什么?请尝试以下类声明:MinTreeHeapJDK 1.7,我得到了相同的错误。Eclipse指向..T Extendes DefaultComparator>中的X。这对于(奇怪的重复模式)非常有意义[很好。这已经帮了很多忙。我还发现,让公共类MinTreeHeap实现PriorityQueue{…}
就足够了,但是当以上述方式调用构造函数时,我该如何更改它呢?MinTreeHeap heap=new MinTreeHeap(new DefaultComparator())
@sebastian:就像我答案底部的例子一样。你只需要用T
替换E
。如果DefaultComparator
按照我的想法做(即实现Comparator
),它应该合适。
Bound mismatch: The type T is not a valid substitute for the bounded parameter
<T extends Comparable<T>> of the type DefaultComparator<T>
public class MinTreeHeap<T extends DefaultComparator<T>> extends BinaryTree
// ↑ ↑
// | the type to compare
// A type extending the Comparator
public class MinTreeHeap<E, C extends Comparator<E>> extends BinaryTree
implements PriorityQueue<E> {
public class MinTreeHeap<E> extends BinaryTree implements PriorityQueue<E> {
public MinTreeHeap(Comparator<? super E> comp) {
// store comp in a field of type Comparator<? super E>
// or pass it over to other implementation code
…
}
…