Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:设置类的基本问题_Java_Constructor_Comparator - Fatal编程技术网

Java:设置类的基本问题

Java:设置类的基本问题,java,constructor,comparator,Java,Constructor,Comparator,我的班级的基本设置有一些问题 背景: 我正在编写一个基于二叉树实现MinHeap的类。 我有一个类BinaryTree、BinaryTreeNode、MinTreeHeap、DefaultComparator和一个接口PriorityQueue MinTreeHeap是我正在编写的类。它实现了PriorityQueue,并执行一些其他操作。 DefaultComparator实现比较两个节点的功能 给定的测试程序调用MinTreeHeap,如下所示: MinTreeHeap<Value&g

我的班级的基本设置有一些问题

背景: 我正在编写一个基于二叉树实现MinHeap的类。 我有一个类
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
  …
}
…