使用可比接口Java

时间:2015-11-15 14:16:30

标签: java interface switch-statement comparable

我需要在我的代码中实现一个类似的接口,以便我可以比较我的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

5 个答案:

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