オープンソースの力

ITエンジニア、特にネット起業したい人向けブログです。

毎日OSSと起業会社紹介

Java8の新しい機能を探求する(一)lambda..

オーペンソースの力

Java8の新しい機能を探求する(一)lambdaに通じる道
投稿者: 敏@opentikara ON 木, 11月 21, 2013

lambdaを十分に理解するために、まず、概念的な知識を紹介しましょう。始める前に、同期にjdk 8   IDEをダウンロードしてください。次のはそのダウンロードアドレスです。 

·         jdk 8https://jdk8.java.net/download.html

·         Netbeans 7.4正式バージョン:https://netbeans.org/downloads/(お勧め)

·         IDEA 12 EAP http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP

·         Unofficial builds of Eclipse :http://downloads.efxclipse.org/eclipse-java8/

関数インターフェース:

 関数インターフェース(functional interface)は唯一の方法を含んでいるインタフェースです。例えば、Javaの標準ライブラリでのjava.lang.Runnablejava.util.Comparatorは皆代表的な関数インタフェースです。注釈として、java8@FunctionalInterfaceを提供します。この注釈は必ずしも必要ではなく、関数インタフェースの標準に満たせるのなら、仮想マシンが自動的に判断できます。

 Javaでのlambdaは独自で表示されないため、一つの関数インタフェースで身を置く必要があります。実際に、lambdaラムダ式メソッド本体は関数インターフェイスの実現です。

Lambda言語

これは3つの部分から構成される。

1、一つの括弧でコンマで区切られた引数の形で、パラメータは関数インターフェイス内のファンクションメソッドパラメータです

2、一つの矢印記号: - >

3、メソッド本体は表現式とコードブロックのどちらでもいい。コードブロックの場合、{}を使用する必要があり、またreturnという戻り値も必要となります。もし、関数インタフェースでのメソッド戻り値はvoidである場合、{}は必要としません。

このように見える:

1

(parameters) -> expression または (parameters) -> { statements; }

 

01

/**

02

 * lambdaの表現式をテストする       

 

03

 *

04

 * @author benhail

 

05

 */

06

public class TestLambda {

 

07

 

08

    public static void runThreadUseLambda() {

 

09

        //Runnableは一つの関数インタフェースで、パラメータのないvoidrun方法しか含んでいる:

10

        //lambdaの表現式の左はパラメータがない、右にもreturnがない

 

11

        new Thread*1.start();

12

    }

 

13

 

14

    public static void runThreadUseInnerClass() {

 

15

        //

16

        new Thread(new Runnable() {

 

17

            @Override

18

            public void run() {

 

19

                System.out.println

20

            }

 

21

        }).start();

22

    }

 

23

 

24

    public static void main(String[] args) {

 

25

        TestLambda.runThreadUseLambda();

26

        TestLambda.runThreadUseInnerClass();

 

27

    }

28

}

   

メソッド参照:

これはlambda表現式の簡単な方法で、lambdaメソッド本体の実現を引用します。その言語は非常に簡単で、左はコンテナ、真ん中は"::"、右側は対応するメソッド名です。次のとおりです。

1ObjectReference:: methodName

一般的な参照形式は次のよう。

1ClassName::methodNameはその静的なメソッドです。例えば、 Object ::equals

2Instance::methodNameはそのインスタンスメソッドです。例えば、Object obj=new

3ClassName::newはそのコンストラクタです。

では、理解しやすいため、完全な例を見てみましょう。

01

import java.awt.FlowLayout;

02

import java.awt.event.ActionEvent;

 

03

import javax.swing.JButton;

04

import javax.swing.JFrame;

 

05

 

06

/**

 

07

 *

08

 * @author benhail

 

09

*1:) ->System.out.println("lambdaが実現したスレッド"