使用类似的界面 Java

Using a Comparable Interface Java

我需要在我的代码中实现一个可比较的接口,这样我就可以比较 ArrayList 中的多位信息,例如高度。完成这项工作后,我需要能够在 switch 语句中调用它。我想我已经得到了类似的接口位,但是当我尝试在 switch 语句中调用它时它显示了一条错误消息。有没有人知道为什么我可以修复这个 is/how?我刚刚附上了相关代码,但如果我需要附上更多,请说明。

可比界面

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

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

Superhero h1 = new Superhero();
Superhero h2 = new Superhero();

您需要像下面这样调用 compareTo 方法

h1.compareTo(h2);

actual and formal argument lists differ in length

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

System.out.println(Superhero.compareTo());

如下所示,不带参数的compareTo() method from the Comparable interface takes a generic as parameter. compareTo()不存在。

public int compareTo(T o)

解决方案

Superhero.compareTo(otherSuperheroObject);

您正在像 Superhero class 的静态方法一样使用 compareTo。您必须在一个 Superhero 实例上调用它才能与另一个实例进行比较。

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));