不兼容的类型:Node 无法转换为 Comparable(当作为参数传递时)
incompatible types: Node cannot be converted to Comparable (when passing as a parameter)
我现在在尝试使用通用数据类型对二叉搜索树建模时遇到问题。我最终会读入字符串值并将它们插入到二叉树中,因此在 Nodez class 中声明了字符串。 Nodez class 是我定义的 class 来声明要传递给搜索树的节点。字符串值将是此 class 的属性。 BSTree 基于 class 定义如下:
public class BSTree<E extends Comparable<E>> implements BSTreeAPI<E>
我的问题出在主要代码块上。当我尝试插入 Nodez class 的实例时发生错误。这里的确切错误是:"incompatible types: Nodez cannot be converted to Comparable"
我花了很多时间尝试调试它,但我对泛型不是很好?
有什么建议吗?谢谢!
package twotreesanalyzer;
import java.io.IOException;
import java.io.PrintStream;
import java.util.function.Function;
public class TwoTreesAnalyzer
{
public static class Nodez <E extends Comparable<E>> {
public String x;
public E node;
public String get(){
return x;
}
}
public static void main(String[] args) throws AVLTreeException, BSTreeException, IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
BSTree bstTest = new BSTree();
Nodez e1 = new Nodez();
e1.x = "fresh";
bstTest.insert(e1);
System.out.println(bstTest.inTree(e1.get()));
}
}
现在您的 BSTree 正在尝试比较您的 nodez 对象,如果这是您希望它运行的方式,您需要在您的 Nodez class 上实现 Comparible。我以集合树为例快速修复了它。
public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
public String x;
public E node;
public String get(){
return x;
}
@Override
public int compareTo(Nodez<E> node) {
return node.x.compareTo(x);
}
}
public static void main(String[] args) throws IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
TreeSet<Nodez<String>> bstTest = new TreeSet<>();
Nodez<String> e1 = new Nodez<>();
e1.x = "fresh";
bstTest.add(e1);
System.out.println(bstTest.contains(e1));
}
但是我认为您希望节点能够接受任何可比较的通用类型,在这种情况下,应该更像这样订购它:
public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
public E x;
public Nodez<E> node;
public E get(){
return x;
}
@Override
public int compareTo(Nodez<E> node) {
return node.x.compareTo(x);
}
}
public static void main(String[] args) throws IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
TreeSet<Nodez<String>> bstTest = new TreeSet<>();
Nodez<String> e1 = new Nodez<>();
e1.x = "fresh";
bstTest.add(e1);
System.out.println(bstTest.contains(e1));
}
我现在在尝试使用通用数据类型对二叉搜索树建模时遇到问题。我最终会读入字符串值并将它们插入到二叉树中,因此在 Nodez class 中声明了字符串。 Nodez class 是我定义的 class 来声明要传递给搜索树的节点。字符串值将是此 class 的属性。 BSTree 基于 class 定义如下:
public class BSTree<E extends Comparable<E>> implements BSTreeAPI<E>
我的问题出在主要代码块上。当我尝试插入 Nodez class 的实例时发生错误。这里的确切错误是:"incompatible types: Nodez cannot be converted to Comparable"
我花了很多时间尝试调试它,但我对泛型不是很好?
有什么建议吗?谢谢!
package twotreesanalyzer;
import java.io.IOException;
import java.io.PrintStream;
import java.util.function.Function;
public class TwoTreesAnalyzer
{
public static class Nodez <E extends Comparable<E>> {
public String x;
public E node;
public String get(){
return x;
}
}
public static void main(String[] args) throws AVLTreeException, BSTreeException, IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
BSTree bstTest = new BSTree();
Nodez e1 = new Nodez();
e1.x = "fresh";
bstTest.insert(e1);
System.out.println(bstTest.inTree(e1.get()));
}
}
现在您的 BSTree 正在尝试比较您的 nodez 对象,如果这是您希望它运行的方式,您需要在您的 Nodez class 上实现 Comparible。我以集合树为例快速修复了它。
public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
public String x;
public E node;
public String get(){
return x;
}
@Override
public int compareTo(Nodez<E> node) {
return node.x.compareTo(x);
}
}
public static void main(String[] args) throws IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
TreeSet<Nodez<String>> bstTest = new TreeSet<>();
Nodez<String> e1 = new Nodez<>();
e1.x = "fresh";
bstTest.add(e1);
System.out.println(bstTest.contains(e1));
}
但是我认为您希望节点能够接受任何可比较的通用类型,在这种情况下,应该更像这样订购它:
public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
public E x;
public Nodez<E> node;
public E get(){
return x;
}
@Override
public int compareTo(Nodez<E> node) {
return node.x.compareTo(x);
}
}
public static void main(String[] args) throws IOException
{
Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);
TreeSet<Nodez<String>> bstTest = new TreeSet<>();
Nodez<String> e1 = new Nodez<>();
e1.x = "fresh";
bstTest.add(e1);
System.out.println(bstTest.contains(e1));
}