スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Java8のラムダ式やコールバック関数について

Java8のラムダ式に興味があり、実際にコーディングしてみた。
コーディングにあたって、同じ内容を
 ①普通にインターフェースを実装するパターン
 ②コールバックを用いたパターン
 ③ラムダ式を用いたパターン
で実現することにした。

①普通にインターフェースを実装するパターン



public interface Calc {
  int calculate(int x, int y);
}



public class App {

  public static void main( String[] args ) {
    int x = 10;
    int y = 5;
    Calc calc = new CalcImpl();
    System.out.println("App:" + calc.calculate(x,y));
  }
}

class CalcImpl implements Calc{

  public int calculate(int x, int y) {
    return x * y;
  }
}

実行結果は以下の通り。
App:50

②コールバックを用いたパターン



public class AppCallback {

  public static void main( String[] args ) {

  setCalc(new Calc(){
      @Override
      public int calculate(int x, int y) {
        return x * y;
      }
  });
}

  private static void setCalc(Calc calc) {
    int x = 10;
    int y = 5;
    System.out.println("AppCallback:" + calc.calculate(x, y));
  }
}

実行結果は以下の通り。
AppCallback:50

③ラムダ式を用いたパターン



public class AppLambda {

  public static void main( String[] args ) {
    //どの書き方もOK
  setCalc((a ,b) -> a * b );
  setCalc((int a ,int b) -> a + b );
  setCalc((int a ,int b) -> {return a - b;});
}

  private static void setCalc(Calc calc) {
    int x = 10;
    int y = 5;
    System.out.println("AppLambda:" + calc.calculate(x, y));
  }
}

実行結果は以下の通り。
AppLambda:50
AppLambda:15
AppLambda:5

◎まとめ
②と③は同じコールバックを異なるパターンでコーディングしてみたものであるが、共に①と異なり、
実装クラスに依存していない(=インターフェースのみに依存)点がメリットになるかと思われる。
しかし、その記述方法については、③のラムダ式を使ったパターンの方がシンプルな記述で処理も追いやすい。
ただし、ラムダ式にはインターフェースに定義できるメソッドはひとつだけと制約があり、Calcインターフェースに
calculate以外にメソッドを追加した場合コンパイルエラーとなるため、状況に応じて、②③を使い分ける必要が
ありそうだ。

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

bookmount8

Author:bookmount8
システムエンジニア。サーバーサイドでjavaを扱うことが多い。最近は、ミドルやフロント周りも関心あり。

最新記事
カテゴリ
検索フォーム
最新コメント
月別アーカイブ
これまでの訪問者数
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。