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

在接口Compariable中重写compareTo()时出现问题

单于庆
2023-03-14

我正在开发一个程序,该程序必须重写Comparable中的CompareTo(),以生成集合。排序()工作。因为我使用的是一个由助手组成的ArrayList,我必须根据名称进行排序。

我环顾了论坛,发现了这一点,并尝试改变

public class Assistant{

public class Assistant implements Comparable<Assistant>{

作为回报,我可以使用这些收藏。sort()在另一个类中,并且没有警告我任何错误,但是,出现了两个新错误。

首先,在同一行中

public class Assistant implements Comparable<Assistant>{

它告诉我“它不是抽象的,也不会覆盖Comparable中的compareTo(助手)”当我转到我创建的compareTo()时:


    @Override
    public int compareTo(Object o2){
        Assistant m2 = (Assistant) o2;

        if(this.name.compareTo(m2.name) == 0){
            return 0;
        }else if(this.name.compareTo(m2.name)<0){
            return -1;
        }else{
            return 1;
        }
    }


(助手的构造函数中只有名称)。

但是,在这个地方,我在@Overder中有一个错误:“方法不会覆盖或实现来自超类型的方法”。

在下一行

    public int compareTo(Object o2){

我收到另一个错误(与上一个错误相关)告诉我:“名称冲突:助手中的compareTo(Object)和助手中的compareTo(Assistant)具有相同的擦除,但两者都不重写另一个。”

我有点理解这个问题,我没有重写原始的compareTo()。

我是java的新手,因此如果有人发现了问题,如果您能解释一下我做错了什么(或遗漏了什么),我将不胜感激。

谢谢:)

共有3个答案

丁毅庵
2023-03-14

这是因为有类似的类型

改变

public int compareTo(Object o2)

public int compareTo(Assistant o2)
严宇
2023-03-14

由于您正在实现可比较的,因此您的compareTo()方法需要一个Asistent类型的参数。

因此,使用它应该可以:

@Override
public int compareTo(Assistent m2) {

    if(this.name.compareTo(m2.name) == 0){
        return 0;
    }else if(this.name.compareTo(m2.name)<0){
        return -1;
    }else{
        return 1;
    }
}
百里芷阳
2023-03-14

这是因为您已参数化了Compariable(类型参数为Assistant)。这应该可以做到(我简化了一点):

@Override
public int compareTo(Assistant o){
    return this.name.compareTo(o.name);
}
 类似资料:
  • 我知道这可能被问了1000次,我看到了1000个答案,但我没有看到任何对我有用的答案。 我必须对实现我自己接口的对象列表进行排序。我决定扩展可比接口并为这些对象实现compareTo方法。 我的界面: 我的对象类 这并不像我预期的那样有效。 编译器似乎认识到ConcreteField必须实现compareTo。那很好。 通过上面的例子,我可以比较ConcreteField对象。但不是当它们由它们的

  • 当实现Comparable接口并重写compareTo方法时, 第三行,我意识到当我重写它时,我可以使用compareTo,它会自动按照自然顺序进行比较。但是在可比较的界面中,它不是一个抽象的方法。没有定义它,它还可以比较吗?还有,为什么我不需要使用super关键字来区分这个比较。

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

  • 首先,很抱歉提出这样的问题,我对java非常陌生。我知道java Comparable Interface只有一个methode,它有一个int返回类型。然而,当我想要覆盖compareTo方法时,我不确定我到底在做什么。对我来说,理解编程很重要,而不仅仅是记住它。例如,在下面的代码中,我们有一个int变量“spaceshipClassComparison”,它等于“this.spaceshipC

  • 有一个带有一些功能的接口。基类实现接口。然后在子类中重写函数。 但是@override给出了编译器错误“方法不从其超类重写方法” 问题:在子类中,如何覆盖基类中实现的接口函数? }

  • 我希望连接的文件夹中有大约500个数据集。它们都有相同的列名:“年”、“邮政编码”、“Var1”、“Var2”、“Var3”。 我使用以下代码循环浏览文件夹中的文件: 当我输出数据集时,仅显示2019年的数据集和邮政编码000001。我打印了整个文件列表,我想要连接的数据集都在那里。有没有洞察到为什么会出现这种情况?谢谢