1
    Comparable w[] = new Comparable[5];
    w[0] = 1;
    w[1] = "string";
    w[2] = 2.0;

それは良い方法ですか?そして、実際になぜそれが機能するのですか(ランダムに試してみました)?Comparable が Integers、Strings、Doubles などを拡張するためでしょうか? だから何?

4

6 に答える 6

5

それは良い方法ですか?

何かをする正当な理由が思いつかない場合、それはおそらく良い考えではありません。;)

Comparable が Integers、Strings、Doubles などを拡張するためでしょうか?

Numbers と Strings は Comparable を実装していますが、あなたは正しい考えを持っています。

だから何?

Java でできる奇妙なことはたくさんありますが、それらのほとんどは使い道がありません。;)

この場合、オブジェクトは互いに比較可能ではないため、特に役に立ちません。例: Arrays.sort(w); 動作しません。

于 2012-08-31T09:49:02.217 に答える
2

それは機能しますが、あまり意味がありません。IntegerStringおよびインターフェイスをDouble実装しComparableますが、一般的な方法(つまり、Integer実装Comparable<Integer>String実装Comparable<String>など)です。

したがって、それが達成しようとしている場合は、Stringとを比較することはできません。Double

于 2012-08-31T09:47:27.597 に答える
2

これは良い考えではないと思います。Object[]このような「異種の」コレクションを保存する必要がある場合に使用します。共通インターフェイスとして指定Comparableすると、配列をソートできるという誤った提案も得られます。これは、異なるコンパレーターが連携できないためです。

于 2012-08-31T09:47:59.750 に答える
1
Comparable w[] = new Comparable[5];

これは、同等のインターフェースを実装するアイテムの配列を構築します。標準型のすべてのラッパーはこのインターフェイスを実装しているため、すべてをそこに格納できます。これの欠点は、比較メソッドが同じクラスのオブジェクト間で比較するように作成されていることです。このコンテナに異なるクラスのアイテムを入れると、その目的が無効になります。

そのため、 Comparable インターフェースをコンテナーの基本型として使用するのはおそらく悪い考えです。意味がないので。

より良いオプションは、すべての Java オブジェクトのスーパータイプである Object[] を使用することです。

于 2012-08-31T09:54:28.190 に答える
0

-すべてWrapper Objectsが実装されComparableており、それがどのように機能するかです。

-さらに、Comparableは、1つのパラメーターのみに従ってソートする必要がある場合に適していますが、複数の方法でソートComparatorする場合に使用すると便利です。

于 2012-08-31T09:50:32.917 に答える
0

配列またはコレクションに格納するオブジェクトの共通の有用なプロパティを定義するクラスのインターフェイスを使用します。

メソッドを直接使用compareToするかどうかに関係なく、たとえば配列を並べ替えるなどして使用する場合は、Comparable を使用してください。Object を使用しない場合は、読者の混乱が少なくなります。そうでない場合は、 Object の代わりに Comparable を選択しても、配列のオブジェクトを有効な方法で制限しないことに注意してください。これは、それを実装する多くのクラスがある (そして成長している) ためです。

ただし、配列文字列、倍精度浮動小数点数、整数を格納する必要はほとんどないことに注意してください。しなければならないという事実は、デザインをチェックする必要があるという合図です。

于 2012-08-31T09:48:45.477 に答える