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);
}

}
4

3 に答える 3

20

これを行う:

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

以上

public class PersonalInformation implements Comparable<PersonalInformation>

インターフェイスを実装する場合Comparableは、最初のメソッドを使用してすべてのオブジェクトに実装するか、2番目の方法でクラスを入力する必要があります。

于 2012-02-20T14:23:58.380 に答える
6

juergendの答えをもっとよく見てください。

メソッドをオーバーロードしています:

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 );
}
于 2012-02-20T14:23:40.483 に答える
6

クラスをコンパイルして動作させるのComparable<PersonalInformation>ではなく、実装する必要があります。Comparable

Comparableを実装している場合、予期されるメソッドシグネチャはcompareTo(Object o)、クラスに欠落しているため、エラーになります。

于 2012-02-20T14:25:14.527 に答える