関数型インターフェースについて
Algorithm はメソッドが一つだけ宣言されたインターフェースです。このようなインターフェースを関数型インターフェースと言い、そのメソッドを関数メソッドと言います。
java.util.function (Java Platform SE 8 )
関数型インタフェースは、ラムダ式やメソッド参照のターゲットとなる型を提供します。各関数型インタフェースには、その関数型インタフェースの関数メソッドと呼ばれる単一の抽象メソッドが含まれており、ラムダ式のパラメータや戻り値の型のマッチングや適応は、そのメソッドに対して行われます。
これはぶっちゃけて言うと、「Java でも関数型言語っぽいことをしたい」という要求を満たすために実装されたもので、特殊な宣言でオブジェクトを作るものです。
ラムダ式について
関数型インターフェースを要求する変数にはラムダ式を代入できますが、その場合、代入されるのは実際には式ではなく、「そのインターフェースを実装する無名のクラスのインスタンス」であり、ラムダ式はそのオブジェクトのメソッドの実装とコンパイラによって解釈されます。
次の資料を見てください。
Java 8:ラムダ式、パート1
このリスト 2 とリスト 3 は同じものですが、リスト 2 は従来の方法を、リスト 3 はラムダ式を使っています。
リスト 2
Java
1public class Lambdas {
2 public static void main(String... args) {
3 Runnable r = new Runnable() {
4 public void run() {
5 System.out.println("Howdy, world!");
6 }
7 };
8 r.run();
9 }
10}
リスト 3
Java
1public static void main(String... args) {
2 Runnable r2 = () -> System.out.println("Howdy, world!");
3 r2.run();
4}
リスト 2 を見ると、Runnable インターフェースを実装した無名クラスを作成して run メソッドを実装し、それを new してインスタンスを作成して変数 r に入れています。
これと同じことがもっと簡潔に書けるよというのがリスト 3 のラムダ式です。
ラムダ式の作り方
ラムダ式を作るにはまず関数型インターフェースが必要です。すでにリンクしましたが、次のページでは実用的な関数型インターフェースがすでに宣言されているのを見ることができます。
java.util.function (Java Platform SE 8 )
また、関数型インターフェースは自分でも作ることができ、Algorithm はその一例です。
ラムダ式の構文ですが、次のようになっています。
Java
1(引数リスト) -> { メソッド本体 }
例えば次の文は、引数を二つとってそれを加算した結果を返すラムダ式になります。
Java
1(int a, int b) -> { return a + b; }
メソッドの場合は次のように書きますが、ラムダ式の場合、戻り値の型は省略されます。
Java
1int add(int a, int b) {
2 return a + b;
3}
このラムダ式はもっと簡潔に書くことができます。
Java
1(int a, int b) -> a + b;
本体が式もしくは文一つで構成される場合、{} と return を省略できます。また、インターフェースで既に宣言されているので、引数の型も次のように省略できます。
また引数が一つの場合、それを囲む () も省略できます。
このようにラムダ式を使うと非常に簡潔に書くことができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 04:21