When compiling the code below, I get the following error:
PersonalInformation is not abstract and does not override abstract method compareTo(Object) in Comparable
I assume that means I have a problem with my compareTo
method. But everything seems to be all right. Anyone have a suggestion?
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);
}
}
So essentially you need to override compareTo() because you need to sort elements in ArrayList or any other Collection.
In order to change the sorting of the objects according to the need of operation first, we have to implement a Comparable interface in the class and override the compareTo() method.
Java String compareTo() MethodThe method returns 0 if the string is equal to the other string. A value less than 0 is returned if the string is less than the other string (less characters) and a value greater than 0 if the string is greater than the other string (more characters).
The compareTo method defines the natural order; the default way for ordering objects of a class. It should return a negative integer(usually -1), if the current triggering object is less than the passed one, and positive integer (usually +1) if greater than, and 0 if equal.
Do this:
public int compareTo(Object pi) {
return ((PersonalInformation )(this.gender)).compareTo(((PersonalInformation ) pi).gender);
}
or better
public class PersonalInformation implements Comparable<PersonalInformation>
If you implement the Comparable
Interface you have to implement it either for all Objects using the first method or type your class the second way.
You need to implement Comparable<PersonalInformation>
rather than Comparable
for your class to compile and work.
If you are implementing Comparable, the expected method signature is compareTo(Object o)
which is missing in your class and hence the error.
You're overloading the method:
public int compareTo(PersonalInformation pi)
{
return (this.gender).compareTo(pi.gender);
}
instead of overriding it:
public int compareTo(Object pi)
It could be something like:
public int compareTo(Object pi)
{
if ( ! pi instanceof PersonalInformation )
return false;
return (this.gender).compareTo( (PersonalInformation)pi.gender );
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With