先日、関数型インターフェースの話を書いたけど今度はアノテーション「@Functionalinterface」についてです。

Java


関数型インターフェースとは、単一の抽象メソッドを持つインターフェースのことです。

例えば、親クラスを用意して実行する処理は呼び元によって変える、ということもできるようになります。
以下、実装例です。

実行環境

  • Java8

実装例

■親クラス

public abstract class AbstractExample {

    @FunctionalInterface
    protected interface TestExecutor {

         T execute();

    }

    protected String execute(final TestExecutor executor) {
        // ファンクションを実行するだけ
        return executor.execute();

    }

}


■子クラス
public class ExampleClass extends AbstractExample {

    public void outMsg() {
        // executeにファンクションを渡す
        System.out.printIn(execute(() -> doTestA()));
        System.out.printIn(execute(() -> doTestB()));

    }

    private String doTestA(){
        // 文字列を出力するだけ
        return "TestA";

    }

    private String doTestB(){
        // 文字列を出力するだけ
        return "TestB";

    }

}



実行結果


TestA
TestB


まとめ

コードをスッキリ書くときぐらいにしか使用用途を思いつきませんが、便利ですね。
みんなはどんな場面で使っているのだろうかw

スポンサーリンク