абстрактный метод CompareTo не переопределяется - PullRequest
4 голосов
/ 20 февраля 2012

При компиляции кода ниже я получаю следующую ошибку:

PersonalInformation не является абстрактной и не переопределяет абстрактный метод compareTo (Object) в Comparable

IПредположим, это означает, что у меня проблема с моим 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 ]

18 голосов
/ 20 февраля 2012

Сделайте это:

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

или лучше

public class PersonalInformation implements Comparable<PersonalInformation>

Если вы реализуете интерфейс Comparable, вы должны реализовать его либо для всех объектов, используя первый метод, либо введите свойкласс второй путь.

6 голосов
/ 20 февраля 2012

См. Ответ Юргена Д., гораздо лучше.

Вы перегружаете метод:

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 );
}
5 голосов
/ 20 февраля 2012

Вам нужно реализовать Comparable<PersonalInformation> вместо Comparable, чтобы ваш класс компилировался и работал.

Если вы реализуете Comparable, ожидаемая сигнатура метода - compareTo(Object o), которая отсутствует в вашем классе иотсюда и ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...