Comparable
エクスポートする関数は 1 つだけであり、その関数は「this」型 (Comparable を実装するクラス) のパラメーターを 1 つだけ受け入れるため、Comparable がパラメーター化されるのはなぜですか? Comparable が自然順序付けに使用されている場合、このインターフェースを実装するクラスとは異なるクラスを渡す人がいるでしょうか?
5 に答える
何がそれを消費しているのかを考えるときに便利です。例えば:
public <T extends Comparable<T>> void sort(List<T> list)
item.compareTo(otherItem)
そうすれば、両方がである限り、タイプセーフな方法で呼び出すことができますT
。
同様に、それを実装するときは、次のように書くことができます。
public int compareTo(MyClass other)
使用する代わりに:
public int compareTo(Object other)
そしてキャスト。
そうです、実装するのは非常に奇妙Comparable<SomethingElse>
ですが、「このインターフェイスを実装しているタイプ」を一般的な方法で参照する方法は他にありません。「その他」の部分をきれいに表現できると便利です。
あなたは2つのタイプX
を持つことができ、Y
それは両方ともComparable<B>
です。X
とをY
拡張(または実装)する限り、B
これらのオブジェクトを自由に相互比較できます。
W
理論的には、であるクラスを作成することもできますComparable<V>
。つまり、。の他のインスタンスと比較することはできますが、比較することはできV
ませんW
。現時点では、そのための適切なユースケースを考えることはできませんが、それは可能です。
私の知る限り、Tがそれ自体と比較可能であると言う唯一の方法です。
彼らはこれを表現するためにいくつかの省略形を追加できたはずです。
ラジクマール、あなたはすでに質問に答えています。Comparable は型安全性を保証するジェネリックであり、適切な型 (Comparable を実装するクラス) の引数を指定していることを確認してください。
このパラメーターを使用すると、instanceof オペレーターを使用する必要はありません。
Comparable は、オブジェクトのインスタンスが別のインスタンスに対応しているかどうかを比較するためによく使用されます。たとえば、DogA が DogB と同じである場合、誰も猫ではないことがわかります。猫は起源が異なるため、猫が犬であるかどうかはわかりません。これ