6

チュートリアルに従いましたが、Countryクラスを作成できませんでしComparableBST

主要:

BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);

カントリークラス:

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

エラー:

@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

名前の衝突:Country型のメソッドcompareTo(Object)は、Comparable型のcompareTo(T)と同じ消去を持ちますが、それをオーバーライドしません。Country.java / Lab2_prob 4/src行17Java問題

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

とクラス:

public class Country implements Comparable<Country>{
    private String name;
    private String capital;
    private int area;

Description Resource    Path    Location    Type

タイプCountryは、継承された抽象メソッドComparable.compareTo(Country)Country.java / Lab2_prob 4 / src line2Java問題を実装する必要があります。

4

2 に答える 2

21

クラスは以下Countryを実装する必要がありますComparable

public class Country implements Comparable<Country>

次に、compareToメソッドは次のようになります。

@Override
public int compareTo(Country anotherCountry) {
    return this.name.compareTo(anotherCountry.getName());
}

の署名に注意してくださいcompareTo。パラメータは、タイプCountryではなく、タイプである可能性があります(また、そうである必要があります) Object。これは、のジェネリック型パラメーターのために必要ですComparable。利点は、タイプをチェックする必要がなくなったことです。Country欠点は、他のオブジェクト(またはそのサブタイプ)としか比較できないことですCountryが、ほとんどの場合、これはとにかく必要なものです。そうでない場合は、タイプパラメータを変更する必要があります。たとえばComparable<Object>、の署名を使用する場合は、再度compareTo行うことができますObject。ジェネリックスについて詳しくは、こちらをご覧ください。

于 2012-10-24T14:50:17.967 に答える
5

Comparableは次を返す必要があります。

このオブジェクトが指定されたオブジェクトよりも小さい、等しい、または大きいため、負の整数、ゼロ、または正の整数。

ただし、コードが返すのは-1または0のみであり、これは正しくありません。これthisは、他のオブジェクトよりも小さくすることも、等しくすることもできますが、大きくすることはできないことを意味します。

によって返される値を変更する必要はありませんname.compareTo()。直接返すことができます。

于 2012-10-24T14:47:56.537 に答える