質問

このようなコードが見えます

class A implements Comparable<A> {


}

これはどういう意味ですか、それの利点と短所は何ですか?

役に立ちましたか?

解決

それは、クラスが「」によって定義された方法に応答することを約束していることを意味します。インターフェース" 同程度の.

あなたがこれ(および他の「実装」宣言)で持っている利点はあなたができることです」概要「代わりにインターフェイスへのオブジェクトとコードのタイプ。

このことを考慮

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

その後、使用できるものをコーディングできます 同程度の 特定のタイプの代わりに:

public void doSomethingWith( Comparable c ) {

       c.compareTo( other ); // something else...

}

そして、それを呼び出します:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

クラスのタイプが何であるかは本当に気にしないため、インターフェイスを実装することを気にします。

これ(実装ではなくインターフェイスへのプログラム)は、OOプログラミングの世界で最も強力な手法の1つです。 低カップリング.

他のヒント

同等のインターフェイスを実装することは、AをAの他のインスタンスと比較できることを意味します。

ソートを含むJavaの多くの操作は、比較可能なインターフェイスで定義されたメソッドを使用して、Aのインスタンスが他のインスタンスよりも小さいか等しいかを判断します。

これらのメソッドを実装することにより、Javaソートなど、バイナリツリーのキーASのインスタンスなど、多くの便利な機能を使用できます。

これは、同等の比較方法を使用してクラスAをソートできることを意味します。

A a1 = new A(1);
A a2 = new A(3);

// -1, 0, or 1 depending on whether a2 is less than, equal to, or greater than a1
int order = a1.compareTo(a2);

同等のクラスの自然な注文を使用します。

Java 5以来の別の方法は次のとおりです コンパレータ. 。このオブジェクトを渡すことができ、ターゲットクラスを比較およびソートする方法を複数持っています。たとえば、名前のクラスを姓ごとに並べ替えたい場合があります。同等の方法でそれを行う方法の1つだけを提供しますが、いくつかのコンパレータインスタンスを持つことができます。

つまり、クラスは、引数が同じタイプの他のオブジェクト(リストの事前定義されたソート機能など)と比較できるオブジェクトであることを期待する関数によって操作できるものであることを意味します。

同等のインターフェイスを実装することは、クラスがインターフェイスに必要な特定の機能をサポートすることを意味します(具体的には、 compareTo() 方法)、クラスで実行されているソート(またはその他の)操作が、クラスの残りの部分を気にせずに仕事をするために利用することです。

詳細については:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

他のすべての人が言ったことに加えて、インターフェイスを実装する(またはクラスを拡張)することにより、スーパータイプの契約のコンパイラ施行を取得します。 「比較可能」の場合、実装クラスで「int比較(ana)」メソッドの実装に失敗した場合、コンパイラエラーが発生することを意味します。 Annotation '@Override'を実装方法に追加すると、さらにコンパイル時間の安全性が得られます。適切な署名でメソッドを実装しなかった場合、コンパイラが伝えます。コンパイル時間エラーは、実行時エラーよりもはるかに簡単で、修正がはるかに簡単で安価です。さらに、インターフェイスを実装することで、インターフェイスタイプを引数または汎用パラメーターとして使用するメソッド(およびコンストラクター)のインターフェイスタイプとして、実装クラスの任意のインスタンスを扱うことができます。たとえば、「java.util.collections.max(collection coll)」メソッドは、ベースタイプが「同等」拡張する必要があるコレクションを取ります。
http://download.oracle.com/javase/7/docs/api/java/util/collections.html#max(java.util.collection)

つまり、このクラスのオブジェクトは、互いに比較できるため、コレクションで簡単にソートできることを意味します。もう1つのオプションは、他のクラスのソートを担当するクラスであるコンパレータを実装することです。同等のものは、ソートされるようにクラスに直接ソートロジックを置きます。コンパレータは、ソートロジックを別のクラスに配置します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top