*

JDK8(java 8)の新機能のラムダ式の利用方法[その1:概要]

公開日: : 最終更新日:2015/05/02 Java ,


スポンサードリンク



「JDT betaを利用してJDK8対応のEclipse開発環境を作成する[Mac編]」では、「Eclipse」上で最新の「JDK8」でプログラミングが行える環境を作成しました。

本エントリーでは、新機能の目玉であるラムダ式の説明を行いたいと思います。
目玉ですので、1つのエントリーではおさまりませんので、その1としております。

と書きつつ、ググってみると
@ITに「知っといてムダにならない、Java SE 8の肝となるラムダ式の基本文法」
との分かりやすい記事がありました。ぐうの音もでません・・・が、

・少し難しいかも
バリバリのJavaプログラマーで、知識が結構あって、
かつJDK5以降の機能もまずます押さえている読者であれば読み切れるでしょう。

・インターフェースのメソッドの戻り値が無しの例が殆ど

・先行してラムダ式を取り入れたC#との比較が無い

の3点に留意してエントリーを作成して行きたいと思います。
3番目はどうでもいいか・・・

と思ったら
「初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築」
までありました。うーん・・・

と前置きが長くなりましたが、本エントリーの内容は以下のようになります。

  1. ラムダ式が指定できる場所の概説
  2. 簡単なラムダ式の説明

 

1 ラムダ式が指定できる場所の概説

どんな時でもラムダ式が書けるわけではありません。以降で説明させていただきます。
ざっくりと利用可能シーンを挙げると以下のようになります。

利用可能シーン 超概要
関数型インターフェースの初期化or代入 関数型インターフェースとはメソッドを1つしか定義していないインターフェイス
メソッドの引数 配列のreplaceAllで条件式として利用されたり、Arrays.sortのComparatorとして利用
キャスト演算子の対象 複数の@FunctionalInterfaceを継承した@FunctionalInterfaceが存在する時に、それらのキャスト演算子の結果に記載

JDK8(Java 8)の新機能のラムダ式の説明[その1]では、
「関数型インターフェースの初期化or代入」の概要のみを説明させていただきます。

関数型インターフェースの初期化or代入

正確には関数型インターフェースやSAM(Single-Abstract-Method) Typeです。

関数型インターフェースとは、定義しているメソッドが単一のインターフェースです。
厳密には「インタフェースのデフォルトメソッド」はカウントしません。

「SAM Type」と「インタフェースのデフォルトメソッド」については、Java8の新機能のラムダ式の説明[その2]以降
で説明させていただきます。

関数型インターフェースは、単一のメソッドしか存在しないため

関数型インターフェース 変数名 = () -> 処理;

とコーディングすれば、処理は、インターフェースの実装に対応付けするしかないですよね。
インターフェースに複数のメソッドがあるとコンパイラは自動的に対応付けが不可能です。

まあ、戻り値や、引数などで判定できないこともないのでしょうが、それではコードの可読性が極端に落ちるし、
誰かがインターフェースを修正してしまい、大混乱になることが容易に想像できますね。

これが関数型インターフェースの初期化に該当します。

「変数名.単一のメソッド();」
の呼び出しで「処理;」が実行されます。

2 簡単なラムダ式の説明

「JDT betaを利用してJDK8対応のEclipse開発環境を作成する[Mac編]」でラムダ式の動作確認に利用したコードを使ってラムダ式を説明します。

匿名クラスの処理の説明

ソースの7行目でRunnableインターフェースを実装した匿名クラスをnewしています。
Runnableインターフェースにはrun()メソッドしか存在しませんので、runメソッドを実装しています。
runメソッドの中身は説明不要と思います。

このRunnableインターフェースがメソッドの定義を1つしか保持していないことがラムダ式と大きく関係あります。

@Overrideはアノテーションで、「私は、インターフェースのメソッドor抽象メソッドの実装をしたよ!」ぐらいの意味です。

Runnable r2に代入されたラムダ式

ソースの16行目のイコールの右辺がラムダ式です。

Runnableインターフェースはrun()メソッドしか定義されておらず、
System.out.println(“Hello world two!”);がr2のrun()メソッドの実装となります。

匿名クラスのr1に比べてラムダ式を用いたr2の実装は行数がかなり少なくなっています。
こんな単純な例に関わらずです。コードの可読性も格段に向上しています。

ここまで理解していただけると、
じゃあ、以下の様な時はどうするの?、との疑問がわいてくると思います。

  • r2のrun()メソッドの実装を複数行にしたい時は?
  • インターフェースの単一メソッドに引数がある時は?
  • インターフェースの単一メソッドが戻り値を持つ時は?

これについてもJava8の新機能のラムダ式の説明[その2]以降で説明させていただきます。

「JDK8(java 8)の新機能のラムダ式の利用方法[その1:概要]」は以上です。

ラムダ式の利用方法[その2:関数型インターフェースを例としたラムダ式]につづく


スポンサードリンク



関連記事

java8(JDK8)の新機能[大幅に強化されたコレクションAPI:java.util.List] をeclipseとJUnitで確認する。

Java8(JDK8)では、ラムダ式の導入を前提とした、コレクションAPIの新機能が追加されました。

記事を読む

JDT betaを利用してJDK8(java 8)対応のEclipse開発環境を作成する[Mac編]

「Java 8の新機能について」では、どんな新機能があるか紹介させていただきました。 今後、少

記事を読む

Eclipse4.3のチュートリアル機能で”Hello World”アプリケーションの作成方法を説明する。

Eclipseのインストールが終了したので、各画面エリアの名称の説明、各画面エリアの使い方の説明を

記事を読む

Eclipse(4.3,4.4)の使い方[各画面エリアの名称とパースペクティブのビューのカスタマイズ]

本エントリーでは、Eclipse(Eclipse4.3,4.4)の各画面エリアの名称の説明と、ビュー

記事を読む

Java超入門 with Eclipse[5:クラスに関する基礎知識(メソッドをJUnitを使って説明)]

クラスに関する基礎知識シリーズも、いよいよメソッドを残すのみとなりました。 前回までは、Eclip

記事を読む

JUnit入門その5[DBUnitの概要説明]

前回エントリーでは「JUnit入門その4」と題してDBUnitをEclipseで動作させるための環境

記事を読む

Eclipse(4.3)の使い方[パースペクティブのツールバーのカスタマイズ(「ツール・バー可視性」と「メニュー可視性」タブ)]

前回エントリー「Eclipse(4.3)の使い方[各画面エリアの名称とパースペクティブのカスタマイズ

記事を読む

EclipseでAndroidアプリケーションの開発環境の構築と”Hello World!”まで

対象のOSはMac(OS X 1.9.5)とWindows7 64bitとなります。 といっても手

記事を読む

利用すると生産性が格段に向上する厳選Eclipseショートカット集

今回のエントリーは、利用すると生産性が格段に向上するEclipseのショートカット集となります。

記事を読む

JDK8(java 8)の新機能のラムダ式の利用方法[その3:java8が用意している関数型インターフェース]

[その2:関数型インターフェースを例としたラムダ式] と説明させていただいておりますが、

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

Java8になりラムダ式と「Stream API」が利用できるようにな

Selenium入門その5[ページオブジェクトパターン(Page Object Design Pattern)を利用して変更に強いテストを作成する方法]

Selenium入門その2 では「UIマップファイル」と言う仕組みが

Javaによる非同期処理入門その1[非同期処理の実装方法の概説]

Javaによる非同期処理に関するエントリーを前々から作成したいと思って

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑