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