Java 8の異なる述語インターフェース(例:DoublePredicate、LongPredicate、IntPredicateなど)が提供されています。インターフェイスを実装して独自のコードを記述する場合、異なる述語インターフェイスを使用する利点は何ですか?なぜ1つの述語インターフェースだけではないのですか?なぜ異なる述語インタフェースn JAVA 8?
答えて
これらの特殊な述語インターフェイスのポイントは、プリミティブを使用しているときに不要なauto-(un)boxingを避けることです。
たとえば、あなたがint
値で動作Predicate
を使用する必要がある場合、あなたはどのであなたの代わりにInteger
オブジェクトにボクシングを必要とPredicate<Integer>
の、test(...)
方法に直接int
を渡すことができIntPredicate
を使用することができます。
Javaでは、型引数としてプリミティブ型を使用できないことに注意してください(Predicate<int>
は使用できません)。
これらの異なるインターフェイスは、パフォーマンス上の理由から存在します。
generics
はプリミティブ型を許可していないため(これまでのところ)、ボクシングが必要なため、APIはプリミティブの特殊化を提供し、ボクシングとアンボックスのコストを回避します。
Predicates
だけでなく、タイプ固有のバリアントを持つ他の機能的なインターフェイスもあります。理由は、サポートプリミティブタイプです。
一般的なバージョンは、(Double
含む、Long
など)オブジェクトタイプで使用することができるが、ジェネリックとプリミティブを使用するための方法はありません。私。
Predicate<int> p; //does not compile
は例えば、IntStream
はInteger
上int
はなく上で動作していますが、機能インタフェースのint型固有のバリアントを必要とするので、あなたは、int
値にオブジェクト型指定された機能インタフェースを使用することはできません。
これらの特殊な述語インタフェースは、autoboxingなしでintやfloatのようなプリミティブ型をサポートするために用意されています。それらがなければ、Predicateインターフェースで使用するためにintデータをInteger Objectに変換する必要があります。
- 1. ユニットテストJava 8述語
- 2. Javaでの述語8
- 3. マレットSimpleTaggerの異なる数の述語
- 4. boost異なる述語を持つフィルタイテレータ
- 5. なぜJavaでインタフェースDataInputはreadUnsignedIntメソッド
- 6. 異なるマイナーバージョンのJava 8でCompletionExceptionのメッセージが異なる
- 7. のJava 8 - toEpochSecondが異なるタイムゾーンに
- 8. なぜLINQ.Where(述語).First()は.First(述語)より高速ですか?
- 9. Java UTF-8の異常な動作
- 10. N進述語評価の関数(count_if)
- 11. 異なる言語のJavaアルファベット
- 12. AndroidのJava 8ストリームAPI N
- 13. プロローグ内の述語は、MとNがX以上異なる場合に真です。
- 14. Java 8 HashMap KeySet()がJava 7と異なる出力
- 15. 述語の命名規則が機能によって異なるのはなぜですか?
- 16. レルムjava(アンドロイド)複合述語
- 17. isAnnotationPresentの動作がJava 7とJava 8とで異なるのはなぜですか?
- 18. Java:サブクラスがベースクラスと異なるインタフェースを提供しないようにする
- 19. 特定の要素のみをJava 8述語でフィルタリングする方法は?
- 20. Java 8ストリームと述語を使用するこのコードの時間複雑度
- 21. ハスケルではどのようにm-ary述語とn-ary述語をとり、(m + n)-ary述語を構築できますか?
- 22. なぜ汎用アルゴリズムのために述語バージョンと非述語バージョンを区別するのですか?
- 23. 異なるドメイン/プロジェクトの同じインタフェース
- 24. 異なるjava JDKファイルの違いは何ですか?default-java、java-1.8.0-openjdk-amd64、java-8-openjdk-amd64、java-8-oracle
- 25. なぜ\ RはJava 8とJava 9の間の正規表現で異なった動作をしますか?
- 26. lxml findall SyntaxError:無効な述語
- 27. なぜこの述語書式が '= nil'になっているのですか
- 28. オープン型述語がなぜそれよりも遅い
- 29. このProlog述語はなぜ機能しますか?
- 30. Java述語に相当するC/C++
より興味深い質問がによってによって、いくつかのプリミティブ型ではなく他人を行うだろう。 ;) –
@ PeterLawrey実際にはなぜBooleanStream、CharStream ....ではないのですか? Brianは、まれにしか使用しないAPIのJDKのフットプリントを増やす場所をいくつか挙げています。 –
@SleimanJneidiそれはおそらく理由ですが、決して使用されていない圧縮されたクラスファイルがそれほど足跡を増やしていないことをイメージしません。 –