先日、関数型インターフェースの話を書いたけど今度はアノテーション「@Functionalinterface」についてです。
関数型インターフェースとは、単一の抽象メソッドを持つインターフェースのことです。
例えば、親クラスを用意して実行する処理は呼び元によって変える、ということもできるようになります。
以下、実装例です。実行環境
- Java8
実装例
■親クラスpublic abstract class AbstractExample {
@FunctionalInterface
protected interface TestExecutor
T execute();
}
protected String execute(final TestExecutor
// ファンクションを実行するだけ
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";
}
}
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
TestB
まとめ
コードをスッキリ書くときぐらいにしか使用用途を思いつきませんが、便利ですね。
みんなはどんな場面で使っているのだろうかw
スポンサーリンク