このようなコードが表示されます
class A implements Comparable<A> {
}
これはどういう意味ですか、それの長所と短所は何ですか?
これは、クラスが「インターフェース」Comparableによって定義されたメソッドに応答することを約束されていることを意味します。
これ(およびその他の「実装」宣言)の利点は、代わりにオブジェクトのタイプとコードをインターフェースに「抽象化」できることです。
このことを考慮
class A implements Comparable {
....
}
class B implements Comparable {
....
}
class C implements Comparable {
....
}
次に、特定のタイプの代わりにComparableを使用できるものをコーディングできます。
public void doSomethingWith( Comparable c ) {
c.compareTo( other ); // something else...
}
そしてそれを次のように呼び出します:
doSomethingWith( new A() );
doSomethingWith( new B() );
doSomethingWith( new C() );
クラスのタイプが何であるかは実際には気にしないので、インターフェイスを実装するかどうかだけを気にします。
これ(実装ではなくインターフェースへのプログラム)は、低結合を促進するため、オブジェクト指向プログラミングの世界で最も強力な手法の1つです。
これは、クラスが、引数が同じタイプの他のオブジェクト(リストの事前定義された並べ替え機能など)と比較できるオブジェクトであることを期待する関数によって操作できるクラスであることを意味します。
Comparableインターフェースの実装は、クラスがインターフェースに必要な特定の関数(具体的にはcompareTo()
メソッド)をサポートし、クラスで実行される並べ替え(またはその他の)操作が残りの部分を気にすることなく作業を行うために利用することを意味します。クラス。
詳細については、http: //java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.htmlをご覧ください。
これは、クラスAがComparablecompareToメソッドを使用してソートできることを意味します。
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);
Comparableは、クラスの自然な順序を使用します。
Java 5以降のもう1つの方法は、Comparatorです。このオブジェクトを渡すことができ、ターゲットクラスを比較およびソートするための複数の方法があります。たとえば、Nameクラスを名で並べ替えたり、名前で並べ替えたりする場合があります。Comparableは、それを行う1つの方法しか提供しませんが、複数のComparatorインスタンスを持つことができます。
同等のインターフェースを実装することは、AをAの他のインスタンスと比較できることを意味します。
ソートを含むJavaの多くの操作では、Comparableインターフェースで定義されたメソッドを使用して、Aのインスタンスが他のインスタンスよりも大きいか小さいかを判別します。
これらのメソッドを実装することで、Javaソートなどの多くの便利な機能を使用したり、Aのインスタンスをバイナリツリーのキーとして使用したりすることができます。
他の誰もが言ったことに加えて、インターフェースを実装する(またはクラスを拡張する)ことで、スーパータイプのコントラクトをコンパイラーに強制させることができます。'Comparable'の場合、実装クラスで'int compareTo(A anA)'メソッドの実装に失敗すると、コンパイラエラーが発生することを意味します。実装メソッドにアノテーション「@Override」を追加すると、コンパイル時の安全性がさらに高まります。正しい署名でメソッドを実装できなかった場合、コンパイラが通知します。コンパイル時のエラーは、実行時のエラーよりもはるかに簡単で安価に修正できます。さらに、インターフェイスを実装すると、実装クラスのインスタンスを、インターフェイスタイプを引数またはジェネリックパラメーターとして受け取るメソッド(およびコンストラクター)のインターフェイスタイプとして扱うことができます。たとえば、'java。
http://download.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection)
つまり、このクラスのオブジェクトは、相互に比較できるため、コレクション内で簡単に並べ替えることができます。他のオプションは、他のクラスのソートを担当するクラスであるComparatorを実装することです。Comparableは、ソートされるクラスにソートロジックを直接配置します。コンパレータは、ソートロジックを別のクラスに配置します。