44.標準の関数型インターフェースを使うべし
- 標準で用意されているものを使うことによって、使いやすさが増し、すでに組み込まれている様々なメソッドの恩恵にあずかれる。
- java.util.functionに含まれる関数型インターフェースは43個ある。
- 中心的なのは
UnaryOperator<T>
、BinaryOperator<T>
、Predicate<T>
,Function<T>
,Consumer<T>
,Supplier<T>
の6つ。(6) - 上の6つそれぞれに
int
、long
、double
のプリミティブ型を扱うための関数型インターフェースがある。(18) - FunctionにはSrcToResultFunction(
LongToIntFunction
とか)で6つ。SrcToObjFunction(DoubleToObjFunction
とか)で3つある。(9) - 引数を2つ取るものが9つある。(9)
- BooleanSupplierなるものがある。(1)
- 中心的なのは
- プリミティブ型に対応していない関数型インターフェースでプリミティブ型をボクシングしたオブジェクトを使ってはならない。性能が悪くなる。
- 自身で関数型インターフェースを書く必要があるのは以下の場合。
- 引数を3つ取る関数型インターフェースなど標準で用意されていないものが必要となる場合。
- 一般的に使われていて記述から恩恵を受けれらる、強い関連性をもった契約がある(よくわからん)、defaultメソッドから恩恵が受けられる、といった特徴がある場合。(
Comparator<T>
が例に挙げられている)
- 関数型インターフェースを書く際には、必ず@FunctionalInterfaceをつける。これがあれば、誤った書き方をしていた場合にコンパイルエラーにしてくれる。
- 関数型インターフェースを引数に取るメソッドはオーバーライドすべきでない。(Item52)