我需要在我的代码中实现一个类似的接口,以便我可以比较我的ArrayList中的多个信息位,例如高度。一旦我完成这项工作,我需要能够在switch语句中调用它。我想我已经得到了可比较的接口位,但是当我尝试在switch语句中调用它时它会显示错误消息。有没有人有任何想法,为什么这是/我如何解决它?我刚刚附上相关代码,但请说明是否需要附加更多代码。
可比较的界面
public class Superhero implements Comparable<Superhero> {
public int compareTo(Superhero other) {
return Integer.compare(this.height, other.height);
}
切换声明
case 5:
System.out.println(sortMenu());
int val = input.nextInt();
switch (val) {
//HEIGHT
case 6:
System.out.println(Superhero.compareTo());
}
break;
修改
运行下面添加的代码时出现错误消息:
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
编译器错误消息:
method compareTo in class Superhero cannot be applied to given types;
require: Superhero
found: no arguments
reason: actual and formal argument lists differ in length
答案 0 :(得分:1)
实际和正式的参数列表长度不同
错误清楚地表明您需要传递必需的参数(Superhero
的对象)以使其在下面的代码中工作。
System.out.println(Superhero.compareTo());
答案 1 :(得分:1)
如下所示,Comparable接口中的compareTo()方法采用泛型参数。没有参数的compareTo()不存在。
public int compareTo(T o)
Superhero.compareTo(otherSuperheroObject);
答案 2 :(得分:1)
您已正确识别出您的问题出现在以下代码段中:
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 anotherSuperhero = new Superhero();
System.out.println(Superhero.compareTo(anotherSuperhero));
答案 3 :(得分:0)
你需要将另一个Superhero对象作为参数传递给compareTo方法。
Superhero h1 = new Superhero();
Superhero h2 = new Superhero();
您需要调用compareTo方法,如下所示
h1.compareTo(H2);
答案 4 :(得分:0)
您正在使用compareTo,就像Superhero类的静态方法一样。您必须在一个Superhero实例上调用它以将其与另一个实例进行比较。
Superhero superhero1 = new Superhero();
superhero1.setHeight(10);
Superhero superhero2 = new Superhero();
superhero2.setHeight(20);
int compareResult = superhero1.compareTo(superhero2);