JDK8で変わるJavaプログラミング
Upcoming SlideShare
Loading in...5
×
 

JDK8で変わるJavaプログラミング

on

  • 4,301 views

Java8若手勉強会(2013/8/9)の資料

Java8若手勉強会(2013/8/9)の資料

Statistics

Views

Total Views
4,301
Slideshare-icon Views on SlideShare
4,229
Embed Views
72

Actions

Likes
2
Downloads
5
Comments
0

2 Embeds 72

http://tempo96.hateblo.jp 62
https://twitter.com 10

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    JDK8で変わるJavaプログラミング JDK8で変わるJavaプログラミング Presentation Transcript

    • JDK8で変わる Javaプログラミング 13年8月9日金曜日
    • アジェンダ • JDK8を使う準備 • JDK8の新機能 ・Lambda式 ・メソッド参照 ・標準メソッド ・新しいDate and Time API • まとめ 13年8月9日金曜日
    • JDK8を使う準備 13年8月9日金曜日
    • JDK8のインストール • JDK8 Early Access Releasesを下記URLより ダウンロードしてインストール http://jdk8.java.net/download.html 13年8月9日金曜日
    • JDK8の確認 $ java -version java version "1.8.0-ea" Java(TM) SE Runtime Environment (build 1.8.0-ea-b100) Java HotSpot(TM) 64-Bit ServerVM (build 25.0-b42, mixed mode) 13年8月9日金曜日
    • IntelliJ IDEAのインストール • IntelliJ IDEA Community EditionをDL http://www.jetbrains.com/idea/download/ index.html 13年8月9日金曜日
    • IntelliJの設定 • File>Project StructureでSKDを1.8、言語 レベルを8.0に設定 13年8月9日金曜日
    • JDK8の新機能 13年8月9日金曜日
    • Lambda式 13年8月9日金曜日
    • 匿名クラス List<Integer> numbers = Arrays.asList(7, 3, 5); Collections.sort(numbers, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { int n = o1 % 5; int m = o2 % 5; return n - m; } }); 13年8月9日金曜日
    • 匿名クラスの問題点 • 実装クラスがシンプルな場合、匿名ク ラスは機能が大きすぎる • メソッドの引数に、匿名クラスではな くメソッド自体を渡したい 13年8月9日金曜日
    • Lambda式 • 単一メソッドからなるインターフェース を実装する匿名クラスを、簡潔に記述 する仕組み 13年8月9日金曜日
    • Lambda式 List<Integer> numbers = Arrays.asList(7, 3, 5); Collections.sort(numbers, (o1, o2) -> o1 % 5 - o2 % 5); new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { int n = o1 % 5; int m = o2 % 5; return n - m; } } 同値 13年8月9日金曜日
    • Lambda構文 • コンマ区切りの引数リスト(a, b) • 矢印「 ->」 • 1行の式、もしくはブロックステート メント{}からなるボディ 13年8月9日金曜日
    • public class LambdaSample { public static void main(String[] args) { Calculator sum = (n, m) -> n + m; operate(3, 2, sum); // => 5 Calculator diff = (n, m) -> { if (n >= m) { return n - m; } else { return m - n; } }; operate(3, 2, diff); // => 1 operate(3, 2, (n, m) -> n * m); // => 6 } public static void operate(int n, int m, Calculator c) { System.out.println(c.calculate(n, m)); } } public interface Calculator { int calculate (int n, int m); } 13年8月9日金曜日
    • 関数インタフェース • 1つメソッドからなるインタフェース • Lambda式が利用できる • java.util.functionパッケージに標準の関数 インタフェースが存在 13年8月9日金曜日
    • メソッド参照 13年8月9日金曜日
    • メソッド参照とは • 既存のメソッドを名前で参照して 利用するためのLambda式の仕組み 13年8月9日金曜日
    • public interface Calculator { int calculate(int n, int m); } public class Sample { public static void main(String[] args) { operate(6, 2, (n, m) -> n + m); // => 8 operate(6, 2, Sample::div); // => 3 } public static void operate(int n, int m, Calculator c) { System.out.println(c.calculate(n, m)); } public static int div(int o1, int o2) { return o1 / o2; } } 13年8月9日金曜日
    • 参照の種類 • スタティックメソッド「クラス名::メ ソッド名」 • インスタンスメソッド「インスタンス 名::メソッド名」 • コンストラクタ「クラス名::new」 13年8月9日金曜日
    • 標準メソッド 13年8月9日金曜日
    • インタフェースの問題点 • インタフェースの実装クラスが、インター フェースの全てのメソッドを実装しなけれ ばならないという制約のため、 既存のインターフェースを拡張できない 13年8月9日金曜日
    • public interface SimpleInterface { void doWork(); } public class SimpleInterfaceImpl implements SimpleInterface { @Override public void doWork() { System.out.println("do work"); } } 13年8月9日金曜日
    • public interface SimpleInterface { public void doWork(); public void doOtherWork(); } public class SimpleInterfaceImpl implements SimpleInterface { @Override public void doWork() { System.out.println("do work"); } } doOtherWork()を 実装していないため コンパイルエラー 13年8月9日金曜日
    • 標準メソッド • 実装クラスの制約を受けずに、イン ターフェースを拡張可能にする仕組み • インターフェースに実装する • 実装クラスが実装する必要がない 13年8月9日金曜日
    • public class SimpleInterfaceImpl implements SimpleInterface { @Override public void doWork() { System.out.println("doWork in implement class"); } public static void main(String[] args) { SimpleInterface impl = new SimpleInterfaceImpl(); impl.doWork(); // => doWork in implement class impl.doOtherWork(); // => doOtherWork in interface } } public interface SimpleInterface { public void doWork(); default public void doOtherWork() { System.out.println("doOtherWork in interface"); } } 13年8月9日金曜日
    • 新しいDate and Time API 13年8月9日金曜日
    • 従来の日時APIの問題点 • インスタンスが可変(mutable)である • 煩雑で分かりにくAPI 13年8月9日金曜日
    • DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar now = Calendar.getInstance(); System.out.println(df.format(now.getTime())); // => 2013-08-01 18:00:00 // 3時間後 now.add(Calendar.HOUR_OF_DAY, 3); System.out.println(df.format(now.getTime())); // => 2013-08-01 19:00:00 // mutable!!! 13年8月9日金曜日
    • 新しいDate And Time API • Joda-Time Libraryに影響を受け、新し く作り直した日時API • 理解しやすい日時のモデル • 不変(immutable)かつスレッドセーフな クラスを提供 13年8月9日金曜日
    • LocalTime time = LocalTime.now(); System.out.printf("%s:%s:%sn" , time.getHour(), time.getMinute(), time.getSecond()); // => 18:00:00 LocalTime timeAfter3Hours = time.plus(3, ChronoUnit.HOURS); System.out.printf("%s:%s:%sn" , timeAfter3Hours.getHour() , timeAfter3Hours.getMinute() , timeAfter3Hours.getSecond()); // => 21:00:00 System.out.printf("%s:%s:%sn" , time.getHour(), time.getMinute(), time.getSecond()); // => 18:00:00 // immutable!! 13年8月9日金曜日
    • LocalDate date = LocalDate.now(); System.out.printf("%s-%s-%sn", // => 2013-8-1 date.getYear(), date.getMonthValue(), date.getDayOfMonth()); Period p = Period.of(1, 2, 10); // 1year, 2month, 10day LocalDate date2 = date.plus(p); System.out.printf("%s-%s-%sn", // => 2014-10-11 date2.getYear() , date2.getMonthValue() , date2.getDayOfMonth()); 13年8月9日金曜日
    • まとめ 13年8月9日金曜日
    • JDK8を使ってみて • 一番のインパクトはやはりLambda式 • 型推論により良い意味でJavaっぽくない • モジュール管理のプロジェクト 「Jigsaw」や、Javascript実装のプロジェ クト「Nashorn」も気になる 13年8月9日金曜日