Java.util パッケージのドキュメントをスクロールすると、Optional<T>
とOptionalInt
は互いに関係がありません。これらは無関係のクラスであることを示唆しているため、これは信じがたいように思えます。
OptionalInt
クラスが必要なのですか?なぜあなたは単にOptional<Integer>
? int
が原始的であるという事実によると思いましたが、OptionalChar
がないため、一貫性のない設計選択になります。Java 8では、プリミティブ専用の多くの機能が導入されました。理由は、ボクシングプリミティブが多くの無駄な「ボックス」を作成する可能性が高いためです。
例えばこれ
_OptionalInt optionalFirst = IntStream
.range(0, 100)
.filter(i -> i % 23 > 7)
.findFirst();
_
ここでは、結果としての_Optional<Integer>
_は矛盾します。また、ifPresent(IntConsumer consumer)
などのメソッドは、IntStream
の世界に留まることを可能にします。 _Optional<Integer>
_は変換を強制します(必要に応じて簡単に変換できます)
char
またはshort
またはbyte
を特別にサポートする必要はありません。これらはすべてint
として表現できるためです。欠落しているのはboolean
ですが、値が2つしかないため、ストリームでできることはあまりありません。
Java 8のストリームの一貫性を保つにはOptionalInt
クラスが必要です。 Stream
class を見ると、 、 多くoftheメソッド return Optional<T>
が表示されます。ただし、 Stream<Integer>
、Stream<Long>
、またはプリミティブの他のストリームが使い果たされているため、 IntStream
クラスと LongStream
オブジェクトをボックス化されていない値に置き換えるクラス。たとえば、Stream<Integer>
の要素の合計を見つけるのは簡単ではありませんが、IntStream
の場合は IntStream#sum
これらのクラスでは、JDKはOptional<T>
をOptionalInt
、OptionalLong
などに置き換えて役立ちます。
OptionalInt
は、プリミティブ型int
の値を保持するコンテナです。プリミティブ型はジェネリッククラスの型パラメーターとして使用できないため、Optional<T>
のサブクラスになることはできません。