当前位置: 首页 > 知识库问答 >
问题:

comparable的CompareTo不接受对象类型以外的参数。

殳智志
2023-03-14

这似乎很奇怪,这并不像我预期的那样有效。我编写了一个简单的java类,它实现了可比接口并重写了compareTo()方法。但是,它不允许我传递Object以外的特定类型的参数。我在网上查看了其他人的代码,他们确实使用了其他类型的对象,我将他们的代码复制到eclipse中,但我仍然得到了同样的错误。

我的问题是;我必须做什么来比较这个对象和类型的对象,让我们说Person。比较器接口(compare()方法)也有同样的问题。

这个代码是我在网上找到的。

public class Person implements Comparable {

private String name;
private int age;

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

public int getAge() {
    return this.age;
}

public String getName() {
    return this.name;
}

@Override
public String toString() {
    return "";
}

@Override
public int compareTo(Person per) {
    if(this.age == per.age)
        return 0;
    else
        return this.age > per.age ? 1 : -1;
}

public static void main(String[] args) {
    Person e1 = new Person("Adam", 45);
    Person e2 = new Person("Steve", 60);

    int retval = e1.compareTo(e2);
    switch(retval) {
        case -1: {
            System.out.println("The " + e2.getName() + " is older!");
            break;
        }
        case 1: {
            System.out.println("The " + e1.getName() + " is older!");
            break;
        }
        default:
            System.out.println("The two persons are of the same age!");
    }
}

}

共有1个答案

郤浩慨
2023-03-14

您需要使用泛型来提供特定的类型。

public class Person implements Comparable<Person> { // Note the generic to Person here.
    public int compareTo(Person o) {}
}

carable接口的定义如下,

public interface Comparable<T> {
    public int compareTo(T o);
}
 类似资料:
  • 我希望为我的2D游戏创造平滑的道路。看着这正是我需要的东西。每一篇文章,甚至在上,都给它一个类型,并用构造函数传递所有控制点和一个。这似乎是过时的,不再接受任何类型参数,没有它,它只能与路径工作。构造函数也不接受控制点列表。 这会产生以下错误:

  • 我面临一个java泛型的问题,我的计划是实现一个二叉查找树(key 中的if语句不被接受,我认为这是因为我重写了comareTo,但是我应该如何比较泛型? 还尝试了而不是,结果相同。 最好的问候 编辑:编译器说:在这一行的多个标记-比较类型中的方法comareTo(捕获#1-of?)不适用于参数(可比)-行断点: KeyValPair[line: 39]-comareTo(KeyValPair)

  • 我试图实现Comparable和compareTo(),但似乎无法实现。我一直在尝试不同的方法,但我真的不明白。我知道我应该实现可比较的接口,并且我需要在使用它之前创建方法(对我来说很奇怪,从python到面向对象编程)。 我希望它能比较两个人的年龄,所以我试着编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:“此方法必须返回int类型”,但在我看来,我只返回1、-1和0

  • 在Spark群集上使用pyspark编程时,数据很大,而且是零碎的,因此无法加载到内存中或轻松检查数据的完整性 基本上看起来 维基百科数据: 我从aws S3中阅读了它,然后尝试在pyspark intepreter中使用以下python代码构建spark数据框架: 所有看起来都很好,只有createDataFrame给我错误 为什么我不能将第三列count设置为IntegerType?我如何解决

  • 我有一个银行账户程序,实现了一个扩展到支票账户和储蓄账户子类的银行账户超类。 每个账户有四个属性:名字、姓氏、社会保障和余额。 我有一个BankDatabase类,它创建了一个新的ArrayList来存放这些对象。 我想排序这个ArrayList使用比较接口和comareTo()方法。 我实现了与我的超类类似的功能: 我写了下面的comareTo()方法: 我在BankAccount超类中创建了一