抽象メソッドを 1 つだけ含むインターフェイスは、関数型インターフェイスと呼ばれます。デフォルトの静的メソッドをいくつでも含めることができますが、抽象メソッドは 1 つだけ含めることができます。オブジェクトクラスのメソッドも宣言できます。
関数型インターフェイスは、単一抽象メソッド インターフェイスまたは SAM インターフェイスとも呼ばれます。これは Java の新機能であり、関数型プログラミングのアプローチの実現に役立ちます。
git でチェックアウトする
例1
@FunctionalInterface interface sayable{ void say(String msg); } public class FunctionalInterfaceExample implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample fie = new FunctionalInterfaceExample(); fie.say('Hello there'); } }今すぐテストしてください
出力:
Hello there
関数型インターフェイスにはオブジェクト クラスのメソッドを含めることができます。次の例を参照してください。
例 2
@FunctionalInterface interface sayable{ void say(String msg); // abstract method // It can contain any number of Object class methods. int hashCode(); String toString(); boolean equals(Object obj); } public class FunctionalInterfaceExample2 implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2(); fie.say('Hello there'); } }今すぐテストしてください
出力:
Hello there
無効な機能インターフェイス
関数型インターフェイスは、抽象メソッドを持たない場合にのみ、別のインターフェイスを拡張できます。
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
出力:
compile-time error
例 3
次の例では、機能インターフェイスが非機能インターフェイスに拡張されています。
interface Doable{ default void doIt(){ System.out.println('Do it now'); } } @FunctionalInterface interface Sayable extends Doable{ void say(String msg); // abstract method } public class FunctionalInterfaceExample3 implements Sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3(); fie.say('Hello there'); fie.doIt(); } }今すぐテストしてください
出力:
「メイソンの公式」
Hello there Do it now
Java 定義済み関数インターフェイス
Java は、ラムダとメソッド参照を使用して関数型プログラミングを処理するための事前定義された関数型インターフェイスを提供します。
独自のカスタム関数インターフェイスを定義することもできます。以下は java.util.function パッケージに配置される関数インターフェースのリストです。
インターフェース | 説明 |
---|---|
バイコンシューマー | これは、2 つの入力引数を受け入れ、結果を返さない操作を表します。 |
消費者 | これは、単一の引数を受け入れ、結果を返さない操作を表します。 |
関数 | これは、1 つの引数を受け入れ、結果を返す関数を表します。 |
述語 | 1 つの引数の述語 (ブール値関数) を表します。 |
バイファンクション | これは 2 つの引数を受け取り、結果を返す関数を表します。 |
二項演算子 | これは、同じデータ型の 2 つのオペランドに対する演算を表します。オペランドと同じ型の結果を返します。 |
二重述語 | これは 2 つの引数の述語 (ブール値関数) を表します。 |
ブール値サプライヤー | これは、ブール値の結果の供給者を表します。 |
ダブルバイナリ演算子 | これは 2 つの double 型オペランドに対する演算を表し、double 型の値を返します。 |
ダブルコンシューマー | これは、単一の double 型引数を受け取り、結果を返さない操作を表します。 |
ダブルファンクション | これは、double 型の引数を受け入れ、結果を生成する関数を表します。 |
二重述語 | これは、1 つの double 型引数の述語 (ブール値関数) を表します。 |
ダブルサプライヤー | これは、double 型の結果の供給者を表します。 |
DoubleToIntFunction | これは、double 型の引数を受け取り、int 型の結果を生成する関数を表します。 |
DoubleToLongFunction | これは、double 型の引数を受け取り、long 型の結果を生成する関数を表します。 |
DoubleUnaryOperator | これは、double 型の結果を生成する単一の double 型オペランドに対する演算を表します。 |
IntBinaryOperator | これは 2 つの int 型オペランドに対する演算を表し、int 型の結果を返します。 |
IntConsumer | これは、単一の整数引数を受け取り、結果を返さない操作を表します。 |
整数関数 | これは、整数の引数を受け入れ、結果を返す関数を表します。 |
IntPredicate | これは、1 つの整数引数の述語 (ブール値関数) を表します。 |
イントサプライヤー | 整数型のサプライヤーを表します。 |
IntToDoubleFunction | これは、整数の引数を受け入れ、double を返す関数を表します。 |
IntToLong関数 | これは、整数の引数を受け入れ、long を返す関数を表します。 |
IntUnaryOperator | これは、整数の結果を生成する単一の整数オペランドに対する演算を表します。 |
LongBinary演算子 | これは 2 つの long 型オペランドに対する演算を表し、long 型の結果を返します。 |
ロングコンシューマー | これは、単一の long 型引数を受け入れ、結果を返さない操作を表します。 |
LongFunction | これは、long 型の引数を受け入れ、結果を返す関数を表します。 |
長い述語 | これは、1 つの long 型引数の述語 (ブール値関数) を表します。 |
ロングサプライヤー | これは、長い型の結果の供給者を表します。 |
LongToDoubleFunction | これは、long 型の引数を受け取り、double 型の結果を返す関数を表します。 |
LongToIntFunction | これは、long 型の引数を受け入れ、整数の結果を返す関数を表します。 |
Long単項演算子 | これは、long 型の結果を返す単一の long 型オペランドに対する演算を表します。 |
ObjDoubleConsumer | これは、オブジェクトと double 引数を受け取り、結果を返さない操作を表します。 |
ObjIntConsumer | これは、オブジェクトと整数の引数を受け入れる操作を表します。結果は返されません。 |
ObjLongConsumer | これはオブジェクトと長い引数を受け入れる操作を表し、結果を返しません。 |
サプライヤー | 結果の供給者を表します。 |
ToDoubleBiFunction | これは、2 つの引数を受け取り、double 型の結果を生成する関数を表します。 |
ToDoubleFunction | double 型の結果を返す関数を表します。 |
ToIntBiFunction | これは 2 つの引数を受け取り、整数を返す関数を表します。 |
ToIntFunction | 整数を返す関数を表します。 |
ToLongBiFunction | これは 2 つの引数を受け取り、long 型の結果を返す関数を表します。 |
ToLongFunction | これはlong型の結果を返す関数を表します。 |
単項演算子 | これは、オペランドと同じ型の結果を返す単一のオペランドに対する演算を表します。 |