接口Comparable中覆盖compareTo()的问题

Smp*_*cts 3 java comparable

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

我浏览了论坛,发现并尝试更改

public class Assistant{
Run Code Online (Sandbox Code Playgroud)

public class Assistant implements Comparable<Assistant>{
Run Code Online (Sandbox Code Playgroud)

作为回报,它使我可以在另一个类中使用Collections.sort(),并且不会警告我任何错误,但是会出现两个新错误。

首先,在同一行

public class Assistant implements Comparable<Assistant>{
Run Code Online (Sandbox Code Playgroud)

它告诉我“它不是抽象的,并且不会覆盖Comparable中的compareTo(Assistant)”。当我转到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;
        }
    }


Run Code Online (Sandbox Code Playgroud)

(助手的构造函数仅包含名称)。

但是,在这个地方我在@Override中出错:“方法不会覆盖或实现超类型的方法”。

在下一行

    public int compareTo(Object o2){
Run Code Online (Sandbox Code Playgroud)

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

我有点理解问题,我没有覆盖原始的compareTo()。

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

谢谢 :)

And*_*cus 6

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

@Override
public int compareTo(Assistant o){
    return this.name.compareTo(o.name);
}
Run Code Online (Sandbox Code Playgroud)