Comparable w[] = new Comparable[5];
w[0] = 1;
w[1] = "string";
w[2] = 2.0;
それは良い方法ですか?そして、実際になぜそれが機能するのですか(ランダムに試してみました)?Comparable が Integers、Strings、Doubles などを拡張するためでしょうか? だから何?
Comparable w[] = new Comparable[5];
w[0] = 1;
w[1] = "string";
w[2] = 2.0;
それは良い方法ですか?そして、実際になぜそれが機能するのですか(ランダムに試してみました)?Comparable が Integers、Strings、Doubles などを拡張するためでしょうか? だから何?
それは良い方法ですか?
何かをする正当な理由が思いつかない場合、それはおそらく良い考えではありません。;)
Comparable が Integers、Strings、Doubles などを拡張するためでしょうか?
Numbers と Strings は Comparable を実装していますが、あなたは正しい考えを持っています。
だから何?
Java でできる奇妙なことはたくさんありますが、それらのほとんどは使い道がありません。;)
この場合、オブジェクトは互いに比較可能ではないため、特に役に立ちません。例: Arrays.sort(w); 動作しません。
それは機能しますが、あまり意味がありません。Integer
、String
およびインターフェイスをDouble
実装しComparable
ますが、一般的な方法(つまり、Integer
実装Comparable<Integer>
、String
実装Comparable<String>
など)です。
したがって、それが達成しようとしている場合は、String
とを比較することはできません。Double
これは良い考えではないと思います。Object[]
このような「異種の」コレクションを保存する必要がある場合に使用します。共通インターフェイスとして指定Comparable
すると、配列をソートできるという誤った提案も得られます。これは、異なるコンパレーターが連携できないためです。
Comparable w[] = new Comparable[5];
これは、同等のインターフェースを実装するアイテムの配列を構築します。標準型のすべてのラッパーはこのインターフェイスを実装しているため、すべてをそこに格納できます。これの欠点は、比較メソッドが同じクラスのオブジェクト間で比較するように作成されていることです。このコンテナに異なるクラスのアイテムを入れると、その目的が無効になります。
そのため、 Comparable インターフェースをコンテナーの基本型として使用するのはおそらく悪い考えです。意味がないので。
より良いオプションは、すべての Java オブジェクトのスーパータイプである Object[] を使用することです。
-すべてWrapper Objects
が実装されComparable
ており、それがどのように機能するかです。
-さらに、Comparableは、1つのパラメーターのみに従ってソートする必要がある場合に適していますが、複数の方法でソートComparator
する場合に使用すると便利です。
配列またはコレクションに格納するオブジェクトの共通の有用なプロパティを定義するクラスのインターフェイスを使用します。
メソッドを直接使用compareTo
するかどうかに関係なく、たとえば配列を並べ替えるなどして使用する場合は、Comparable を使用してください。Object を使用しない場合は、読者の混乱が少なくなります。そうでない場合は、 Object の代わりに Comparable を選択しても、配列のオブジェクトを有効な方法で制限しないことに注意してください。これは、それを実装する多くのクラスがある (そして成長している) ためです。
ただし、配列文字列、倍精度浮動小数点数、整数を格納する必要はほとんどないことに注意してください。しなければならないという事実は、デザインをチェックする必要があるという合図です。