【JavaGold勉強】組込み関数型インタフェース
JavaGoldの勉強をしているのですが、組込み関数型インタフェースの種類がいつも頭から抜けてしまうので定着させたい!と思いメモします。
関数型インタフェースとは
抽象メソッドが1つだけ定義されているインタフェースのこと。 (defaultメソッドやstaticメソッドはカウントしない。 )
Java8で追加されたパッケージ「java.util.function」
全部で43のインタフェースが提供されているが、基本になるのは以下の4つ。
| 型名 | 抽象メソッド | 引数 | 戻り値 |
|---|---|---|---|
| Supplier |
T get() | なし | T型 |
| Predicate |
boolean Test(T t) | T型 | boolean型 |
| Consumer |
void accept(T t) | T型 | なし |
| Function<T,R> | R apply(T t) | T型 | R型 |
ラムダ式による実装イメージ
Supplier<String> supplier = () -> "return";
System.out.println(supplier.get());//returnと表示される。
Predicate<String> predicate = str -> str.equals("true");
System.out.println(predicate.test("true"));//trueと表示される。
Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("Hello!");//Hello!と表示される。
Function<String, String> function = str -> "\" + str + "/";
System.out.println(function.apply("OK!"));//\OK!/と表示される。
@FunctionalInterfaceアノテーション
付与すると、関数型インタフェースの条件を満たしているかどうか、コンパイル時にチェックしてくれる。 必須ではないが、付与すると誤って複数の抽象メソッドを定義してしまうのを防ぐことができる。 Java7までに追加されていた既存のインタフェースの内、関数型インタフェースの条件を満たすものにも付与されている。
簡単でも表とコードを書いてみることでちょっと定着した気がします。派生のインタフェースについてもまとめられればと思います!