1
public int compareTo(Object another) throws CustomMadeException
{
    if(this.getClass() != another.getClass() )
    {
        throw new CustomMadeException();
    }

    Car other = (Car) another;


    return this.getBrand().compareTo(other.getBrand());


}

コードの何が問題なのか正確にはわかりません。なぜTを同等に実装できないのですか?compareToの引数をTに変更する必要がありますか?しかし、それはオブジェクトであるべきではありませんか?私の知る限り、comparableインターフェースでのcompareToの実装は空白です。

4

3 に答える 3

2

これを行うための標準的な方法は次のとおりです。

public class Car implements Comparable<Car> {

    ...

    public int compareTo(Car other)
    {
        return this.getBrand().compareTo(other.getBrand());
    }
}

の仕様compareTo()では許可されていないため、の実装ではチェックされた例外をスローできないことに注意してください。Comparable<T>.compareTo()throws

于 2013-03-23T20:15:07.617 に答える
0

ComparableインターフェースからcompareTo()メソッドをオーバーライドするために、新しいまたはより広範なチェック済み例外をスローすることはできません。したがって、あなたはそれをすべて間違っています。これは、Javaのメソッドをオーバーライドするための規則に反します。Javaでオーバーライドするためのルールを知るには、このリンクを参照してください:サンプルリンク

これが、Tをコードに同等に実装できない理由です。これは、コンパイラーがTをオーバーライドされたメソッドではなく、別のメソッドとして処理するためです。しかし実際には、問題はオーバーライドにあります。

于 2013-03-23T20:24:48.840 に答える
0

まず、インターフェースにメソッドの実装が含まれることはありません。

2番目:クラスのimplementsステートメントはどのように見えますか?ジェネリック型を使用する場合は、その型をメソッドのパラメーター型として使用する必要があります。

例:次のようなインターフェースを実装する場合:

public class MyClass implements Comparable<MyClass>

その場合、メソッドには次のシグネチャが必要です。

public int compareTo(MyClass param)
于 2013-03-23T20:16:28.533 に答える