1 / 10

java8 について

2014/03/07. java8 について. 新しく導入される機能については、 以下のページに一覧が載っています。 http://openjdk.java.net/projects/jdk8/features 上記リンクの中で、以下の新機能について解説します。 • 126 Lambda Expressions & Virtual Extension Methods. java8 の新機能. ラムダ式とは? → 簡単に言うと匿名関数 ( 厳密には異なるらしい ) 以下のような書き方になる。 ( 仮引数 ) ( 関数本体 )

nam
Download Presentation

java8 について

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2014/03/07 java8について

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

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

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

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

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

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

More Related