関数型インターフェイス

関数型インターフェースは、ラムダ式やメソッド参照の代入先になれるインターフェースのこと。

Javaでも関数型プログラミングができるようにと新たに用意されて仕組み。

Javaでも関数型プログラミングができるようにと新たに用意されて仕組み。

関数型インターフェースのとは、定義されている抽象メソッドが1つだけあるインターフェースのこと。

  • メソッド参照の構文
  • FunctionnalInterfaceアノテーションの追加

メソッド参照

前述した関数型インターフェイスに対して、メソッドそのものを代入するという考え方になります。

つまりメソッドの参照を代入するようなイメージ。

具体例で考えます。

java8で新しく追加されたIntSupplierインターフェイスは、引数なしで戻り型intのメソッドgetAsInt

メソッドを持っています。このインターフェイスにgetAsIntメソッドにStringクラスのhashCodeメッソッド

を代入することを考えると、具体的には以下の様なコードになります。

public class MethodRef {
 public static void main(String[] args) {
 String s = "abc";
 IntSupplier supplier = s::hashCode;
 System.out.println(supplier.getAsInt());
 }
}

@FunctionalInterfaceアノーテション

次に、自分で関数型インターフェイスを作る例を考えます。最初に書いた通り関数型インターフェイスとは

定義されている抽象メソッドが1つだけあるインターフェイスのことになります。自分でインターフェースを

作成した場合は、@FunctionalInterfaceアノーテションを使えば、関数型インターフェイスとしての機能できるかを

コンパイル段階でチェックしてくれるようになります。

@FunctionalInterface
public interface FuncInt {
    public int get(String x);
}

この例では、引数にString型を1つ受け取り、int型をリターンするメソッドを抽象メソッドとして定義しています。

このインターフェイスをメソッド参照を使ってStirngクラスのindexOfを代入してみた例は次の通り

public class MethodRef {
 public static void main(String[] args) {
 String s = "abc";
 FuncInt in = s::indexOf;
 System.out.println(in.get("a"));
 }
}