Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java8について 2014/03/07.

Similar presentations


Presentation on theme: "Java8について 2014/03/07."— Presentation transcript:

1 java8について 2014/03/07

2 java8の新機能 新しく導入される機能については、 以下のページに一覧が載っています。
上記リンクの中で、以下の新機能について解説します。 • 126 Lambda Expressions & Virtual Extension Methods

3 java8からラムダ式が サポートされる ラムダ式とは? → 簡単に言うと匿名関数 (厳密には異なるらしい) 以下のような書き方になる。
(仮引数) (関数本体) (int x, int y) -> {return x + y;} → ラムダ式を使わなかった場合 public int calc(int x, int y) { return x + y; } → 関数はcalcという名前で定義される。

4 関数型インターフェース •実装すべきメソッドがひとつだけであるインターフェースを 関数型インターフェースという。
•関数型インターフェースにはラムダ式が適用できる。 // Runnableインターフェースはrunメソッドのみ定義 Runnable r = () -> { System.out.println("test"); }; Thread t = new Thread(r); •関数型インタフェースを明示的に表す場合、 @FunctionalInterfaceが使用できる → 関数型インターフェースの定義に従っていない場合、 コンパイル時にエラーが出る。(書き間違いの抑止効果)

5 型推論 (int x, int y) -> {return x + y;} ↓ 引数の型は推論できる場合、省略できる
(x, y) -> {return x + y;} ↓ 引数が一つで型が推論できる場合は()も不要 x -> { /* 関数本体 */ } ↓ 関数本体がreturn文のみだった場合、rerurn, { ;}も省略できる x -> x + 5

6 メソッド参照 •「::」演算子を使用して、メソッドを関数オブジェクトとして 参照できる String::valueOf
これは x -> String.valueOf(x) と一緒。

7 interfaceに仕様が増えた① •interfaceに実装を持てるようになった。 interface Test {
// 実装するメソッドにキーワード「default」を付ける default void test(String s){ System.out.println(s); } •defalutメソッドはオーバーライドできる。

8 interfaceに仕様が増えた② •interfaceに実装を持てるようになったので、 多重継承が可能になった。
public class TestImpl implements Test1, Test2 { // Test1, Test2共に「test」というdefaultメソッドが // 定義されていた場合、コンパイルエラーとなる }

9 interfaceに仕様が増えた③ •defaultメソッドをオーバーライドすればコンパイル可能。
public class TestImpl implements Test1, Test2 { @Override public void test(String s) { System.out.println(s); } •どちらかのdefaultメソッドを呼び出すことも可能 Test2.super.test(s);

10 参考 •きしだのはてな http://d.hatena.ne.jp/nowokay/20130610
•徹底解説!Project Lambdaのすべて [JJUG CCC 2013 Fall H-2] from bitter_fox


Download ppt "Java8について 2014/03/07."

Similar presentations


Ads by Google