引数に関数型インターフェースのインスタンスを新たに定義して渡す場合は、ラムダ式にすることができる。
Java関数型インターフェースメモ(Hishidama's Java8 Functional Interface Memo)
Javaラムダ式メモ(Hishidama's Java8 Lambda Expression Memo)
インターフェースはこのままで、
TestFunctionalInterfaceのインスタンスを引数に取るメソッドmethod1を持つクラスTestClassを定義。
runで値を渡してインスタンスtifのfuncの処理を実行する。
// メインクラス public class MainClass{ // MainClassの定義 // Javaのエントリポイント public static void main(String[] args){ // mainメソッドの定義 // 関数型インターフェースが持つ関数をその場で定義. TestClass testClass = new TestClass(); // TestClassオブジェクトtestClassを生成. testClass.method1(new TestFunctionalInterface(){ // TestFunctionalInterfaceをnewで生成し, funcを実装. @Override public int func(int x){ return x * x; // xの2乗を返す. } }); System.out.println(testClass.run(2)); // 2を渡す. } }
匿名クラスだと、このようにfuncの定義をその場でできる。
で2を渡してrunを実行すると、
4が出力。
さて、これをラムダ式にする。
ついでにfuncの処理も2乗から3乗に。
3乗なので8が出た。