1

私はしばらくの間、同等のクラスを学ぼうとしてきました。正しい構文と、ほとんどの場合の使用方法を知っています。そのような:

int result = ObjectA.compareTo(ObjectB); 

両方のオブジェクトが同じ場合は値 0 を返します。オブジェクト A がオブジェクト B より小さい場合は負の値、A が B より大きい場合は正の値。

しかし、実際にcompareToメソッドを使ったプログラムを書いてみると、コンパイラはcompareToメソッドが見つからないと言っています。

私の質問は次のとおりです。compareTo メソッドを使用するには、Comparable クラスから直接継承する必要がありますか? 私が尋ねている唯一の理由は、toString や equals などのメソッドを明示的に継承する必要がないためです...すべてがオブジェクトから継承されるためです。CompareTo はどこに該当しますか?

4

5 に答える 5

6

Comparableインターフェイスを実装する必要があります。

public class MyClass implements Comparable<MyClass>

compareTo()次に、メソッドを宣言します。

public int compareTo(MyClass myClass){
    //compare and return result
} 
于 2013-03-14T22:21:18.163 に答える
1

Comparableクラスではなくインターフェースです。したがって、クラスをサブクラス化するのではなく、インターフェイスを実装します。さらに、インターフェイスを実装するということはcompareTo、実装クラスでメソッドを自分で実装することを意味します。

于 2013-03-14T22:21:29.997 に答える
0

クラスのオブジェクトを比較したい場合A、おそらくそれらのオブジェクトのリストをソートAしたいという理由で、クラスにインターフェースを実装させる必要がありComparableます。

クラスがA実装さComparableれると、の動作を実装および定義する必要がありますcompareToこれは、基本的に、クラスの2つのオブジェクトを比較する方法です。A

このメソッドでは、クラスのどのフィールドがオブジェクトの小さい方または大きいA方の評価に参加するかを決定できます。

于 2013-03-14T22:25:15.573 に答える
0
  1. まず、インスタンスでのみ機能します。命名のために、比較がオブジェクトまたはクラス自体を比較しているかどうかわかりません。オブジェクトを使用していると仮定します:)
  2. を使用して比較するクラスは、#compareTo実装する必要がありますComparable。実装せずにこれを実現するもう 1 つの方法Comparableは、ソート メソッドにComparatorクラスを想定して提供することです。
于 2013-03-14T22:22:03.170 に答える
0

Comparableはインターフェイスなので、「継承」するのではなく ( extends)、実装します ( implements)。

インターフェイスを指定せずに独自のcompareToメソッドをクラスに記述できますが、その場合、API のメソッドは、オブジェクトが強制Comparableする契約を満たしているかどうかを認識できません。そのため、 enforce を行うオブジェクトで動作することを期待する などのComparableメソッドを使用することはできません。Arrays.sort()Comparable

于 2013-03-14T22:22:53.940 に答える