抽象的compareTo方法未被覆盖重写

6

编译下面的代码时,我遇到了以下错误:

PersonalInformation不是抽象的,并且没有覆盖Comparable中的抽象方法compareTo(Object)

我猜这意味着我的compareTo方法有问题。但是一切似乎都没问题。有人有建议吗?

import java.util.*;
public class PersonalInformation implements Comparable
{
private String givenName;
private String middleInitial;
private String surname;
private String gender;
private String emailAddress;
private String nationalId;
private String telephoneNum;
private String birthday;

public PersonalInformation(String gN, String mI, 
        String sur, String gen, String eMa, String natId,
        String teleNum, String birthd)

{
        givenName = gN;
        middleInitial = mI;
        surname = sur;
        gender = gen;
        emailAddress = eMa;
        nationalId = natId;
        telephoneNum = teleNum;
        birthday = birthd;


}


public int compareTo(PersonalInformation pi)
{
 return (this.gender).compareTo(pi.gender);
}

}
3个回答

20

这样做:

public int compareTo(Object pi) {
    return ((PersonalInformation )(this.gender)).compareTo(((PersonalInformation ) pi).gender);
}

或更好

public class PersonalInformation implements Comparable<PersonalInformation>
如果您实现了Comparable接口,则必须使用第一种方法为所有对象实现它,或者使用第二种方式对类进行类型定义。

6

请参考Juergen D的回答,更好。

你正在过度使用这个方法:

public int compareTo(PersonalInformation pi)
{
    return (this.gender).compareTo(pi.gender);
}

不是覆盖它,而是替换它:

public int compareTo(Object pi)

可能是这样的:

它可能类似于:

public int compareTo(Object pi)
{
    if ( ! pi instanceof PersonalInformation )
        return false;
    return (this.gender).compareTo( (PersonalInformation)pi.gender );
}

我认为这被称为重载,而不是覆盖。 - MByD

6

为了使您的类编译并正常工作,您需要实现Comparable<PersonalInformation>而不是Comparable

如果您正在实现 Comparable,期望的方法签名是 compareTo(Object o),但您的类缺少该方法,因此会出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接