使用可比较的Java接口

使用可比较的Java接口,java,interface,switch-statement,comparable,Java,Interface,Switch Statement,Comparable,我需要在我的代码中实现一个可比较的接口,以便我可以比较ArrayList中的多个信息位,例如高度。一旦我有这个工作,我需要能够调用它在一个开关语句。我想我已经让可比较的接口位工作了,但是当我试图在switch语句中调用它时,它显示了一条错误消息。有人知道这是为什么/我如何解决它吗?我刚刚附上了相关的代码,但如果我需要附上更多,请说 可比界面 public class Superhero implements Comparable<Superhero> { public int co

我需要在我的代码中实现一个可比较的接口,以便我可以比较ArrayList中的多个信息位,例如高度。一旦我有这个工作,我需要能够调用它在一个开关语句。我想我已经让可比较的接口位工作了,但是当我试图在switch语句中调用它时,它显示了一条错误消息。有人知道这是为什么/我如何解决它吗?我刚刚附上了相关的代码,但如果我需要附上更多,请说

可比界面

public class Superhero implements Comparable<Superhero> {

public int compareTo(Superhero other) {
        return Integer.compare(this.height, other.height);
    }
编辑

运行下面添加的代码时出现错误消息:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
at heros.java.Heros.main(Heros.java:54)
Java Result: 1

您需要将Superhero的另一个对象作为参数传递给compareTo方法

Superhero h1 = new Superhero();
Superhero h2 = new Superhero();
您需要调用compareTo方法,如下所示

h1.与(h2)相比

实际参数列表和形式参数列表的长度不同

错误清楚地表明,您需要传递必需的参数(Superhero的对象)以使其在下面的代码中工作

System.out.println(Superhero.compareTo());
如下所示,可比较接口中的方法采用泛型作为参数。没有参数不存在

public int compareTo(T o)

解决方案
您正在使用compareTo,就像超级英雄类的静态方法一样。您必须在一个超级英雄实例上调用它,以将其与另一个实例进行比较

Superhero superhero1 = new Superhero();
superhero1.setHeight(10);
Superhero superhero2 = new Superhero();
superhero2.setHeight(20);

int compareResult = superhero1.compareTo(superhero2);

您已经正确地确定问题出在这段代码中:

case 5:
    System.out.println(sortMenu());
    int val = input.nextInt();
    switch (val) {
        //HEIGHT
        case 6:
             System.out.println(Superhero.compareTo());
    }
    break;
在这条线上:

System.out.println(Superhero.compareTo());
在此表达式中:

Superhero.compareTo()
Superhero在这里看起来像一个变量(变量应该以小写字母开头,这很容易混淆),您需要为它提供另一个Superhero对象,如下所示:

Superhero anotherSuperhero = new Superhero();
System.out.println(Superhero.compareTo(anotherSuperhero));

运行时,您会收到什么错误消息或堆栈竞赛?
Superhero.compareTo()
?您想在这里比较什么?@iHappyk刚刚添加了一条错误消息,您需要将Superhero的另一个对象作为参数传递给compareTo Method,以避免运行不可编译的代码。在这种情况下给出编译器的错误消息。compareTo不返回高度。
System.out.println(Superhero.compareTo());
Superhero.compareTo()
Superhero anotherSuperhero = new Superhero();
System.out.println(Superhero.compareTo(anotherSuperhero));