1

Boolean および Character ラッパー クラスが Serializable インターフェイスと Comparable インターフェイスを実装しているのはなぜですか? それの用途は何ですか?

4

4 に答える 4

8

このComparableインターフェースはJava 5Booleanのクラスに追加され、バグJDK-4329937および少なくとも 1 つのバグに対処しました。引用された問題の 1 つは、.JTable

当初、Joshua Blochからも反論がありました。

現在の設計は言語自体と一致しています。2 つのブール値の順序を比較しようとすると、コンパイル時にエラーが発生します。

if (true < false)  // ERROR: WON'T COMPILE
    foo();

ラッパー クラス (ブール値) は、ラップされたプリミティブの動作をミラーリングするだけです。...

プラグマティズムの祭壇でこの「設計の純粋さ」を喜んで犠牲にしますが、ブール値を比較する必要があるとは確信していません。ブール値のリストをソートしたいことは非常にまれです。より一般的なのは、このフィールドに基づいて Boolean フィールドを含むオブジェクトのリストをソートすることですが、これを行うには Comparator を使用する必要があります。とにかく Comparator を作成している場合、Boolean 自体は Comparable を実装していませんが、Boolean フィールドに基づいてソートするのは簡単です。

しかし、数年後、有用性が認められました。

この機能を提供すれば、人々の生活が楽になることが何年にもわたって明らかになってきました。

この拡張機能が実装されてから、さらに便利になりました。たとえば、Java 8では、このクラスは、フィールドに基づいてコンパレーターを構築できるComparator新しいメソッドcomparing()および を導入しました。thenComparingまた、ソート基準の一部としてブール値フィールドを含めることは合理的で便利です。

于 2021-04-02T19:18:40.863 に答える
5

それを含むオブジェクトをシリアル化できるように、Serializable を実装します。シリアライズ可能にしないと、深刻な制限になります。

Comparable は、可能な値が 2 つしかないためあまり役に立ちません。そのため、他のラッパーとの一貫性を保つために使用される可能性があります。

注:Voidはシリアライズ可能または同等ではありませんが、シリアライズ可能である場合のみ可能nullです。

于 2012-12-15T13:58:55.057 に答える
2

ほとんどの Collection クラスでプリミティブを使用するには、Comparable を実装する必要があります。ラッパーがないと、順序付けされた Collection クラスでプリミティブを使用できませんでした。また、純粋なプリミティブであるため、equals メソッドがないため、キー ベースの Collection クラスは機能しません。

于 2012-12-15T13:07:00.930 に答える
0

これが1つです。...でインスタンス化ArrayList<T>してみてくださいboolean

于 2012-12-15T13:02:52.527 に答える