I followed a tutorial, but failed to make my Country
class Comparable
for my BST
.
Main:
BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);
Country class:
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
int i = this.name.compareTo(anotherCountryName);
if(i < 0){
return -1;
} else {
return 0;
}
}
error:
@Override
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
return this.name.compareTo(anotherCountryName);
Description Resource Path Location Type
Name clash: The method compareTo(Object) of type Country has the same erasure as compareTo(T) of type Comparable but does not override it Country.java /Lab2_prob 4/src line 17 Java Problem
Description Resource Path Location Type
The method compareTo(Object) of type Country must override or implement a supertype method Country.java /Lab2_prob 4/src line 17 Java Problem
and class:
public class Country implements Comparable<Country>{
private String name;
private String capital;
private int area;
Description Resource Path Location Type
The type Country must implement the inherited abstract method Comparable.compareTo(Country) Country.java /Lab2_prob 4/src line 2 Java Problem
Best Answer
Your
Country
class should implementComparable
:Then your
compareTo
method should look like this:Note the signature of
compareTo
. The parameter can (and must) be of typeCountry
, notObject
. This is required because of the generic type parameter onComparable
. The upside is you don't have to check the type anymore. The downside is you can only compareCountry
to otherCountry
objects (or its subtypes), but in most cases this is what you want anyway. If not you have to change the type parameter, e.g. if you useComparable<Object>
the signature ofcompareTo
can beObject
again. You can read more about generics here.