*

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)の新機能をEclipseとJUnitで[インターフェースのデフォルト実装の使い方]

本エントリーでは、まずSAM Typeの説明をさせていただきます。 その流れの中で「java8の新

記事を読む

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

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

記事を読む

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

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

記事を読む

Eclipse4.4,4.3の使い方[エディタのフォントサイズの変更方法]

今回は、Eclipse4.4と,4.3におけるエディタエリアのフォントサイズの変更方法を説明させてい

記事を読む

Eclipse(4.3,4.4)のJava言語のリファクタリング機能の使い方[リファクタリングの説明と「名前変更」と「移動」]

本エントリーでは、Eclipse(4.3,4.4)の「リファクタリング」機能の使い方を説明させていた

記事を読む

Eclipseの使い方(Eclipse4.4のブックマーク機能とタスク機能)

今回は、Eclipseのブックマーク機能とタスク機能の説明をさせていただきます。 両機能とも効率的

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[JRAおよびクラス・フォルダー/ライブラリー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「JRAおよびクラス・フォルダー

記事を読む

JUnit入門その2[Eclipse4.4のJUnitプラグインのassertThatの使い方]

JUnit入門その1ではEclipseのJUnitプラグインの基本的な使い方を説明させていただきまし

記事を読む

Eclipseのインストールと日本語化とJDK8(Java8)対応[Eclipse4.4とEclipse4.3]

インストールするEclipseのバージョンですが、とりあえず4.3をターゲットとしておき、 4.4

記事を読む

Java超入門 with Eclipse[4:クラスに関する基礎知識(修飾子とクラスとインスタンスと変数)]

前回は、Javaの基本であるクラスの基本的な知識をざっくりと説明させていただいたあと、 packa

記事を読む

Message

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

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpring

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

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

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

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

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

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑