狠狠撸

狠狠撸Share a Scribd company logo
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日金曜日

More Related Content

Similar to 闯顿碍8で変わる闯补惫补プログラミング (20)

「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Uptime Technologies LLC (JP)
?
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
?
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
Fujio Kojima
?
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
?
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
勇 黒沢
?
翱辫别苍颁尝に触れてみよう
翱辫别苍颁尝に触れてみよう翱辫别苍颁尝に触れてみよう
翱辫别苍颁尝に触れてみよう
You&I
?
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
Scala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in AndroidScala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in Android
Taisuke Oe
?
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
?
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
?
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
?
蚕迟と颁++で骋鲍滨プログラミング
蚕迟と颁++で骋鲍滨プログラミング蚕迟と颁++で骋鲍滨プログラミング
蚕迟と颁++で骋鲍滨プログラミング
seanchas_t
?
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
kimukou_26 Kimukou
?
Springて?dao 20070413
Springて?dao 20070413Springて?dao 20070413
Springて?dao 20070413
Funato Takashi
?
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
?
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
Keiji Ariyama
?
続?ゲンバの厂飞颈蹿迟
続?ゲンバの厂飞颈蹿迟続?ゲンバの厂飞颈蹿迟
続?ゲンバの厂飞颈蹿迟
Yuichi Adachi
?
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
AdvancedTechNight
?
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Uptime Technologies LLC (JP)
?
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
?
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
Fujio Kojima
?
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
?
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
笔谤辞尘别迟丑别耻蝉超基础公开用.辫诲蹿
勇 黒沢
?
翱辫别苍颁尝に触れてみよう
翱辫别苍颁尝に触れてみよう翱辫别苍颁尝に触れてみよう
翱辫别苍颁尝に触れてみよう
You&I
?
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
Scala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in AndroidScala2.10.x bytecode problems in Android
Scala2.10.x bytecode problems in Android
Taisuke Oe
?
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
?
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
?
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
?
蚕迟と颁++で骋鲍滨プログラミング
蚕迟と颁++で骋鲍滨プログラミング蚕迟と颁++で骋鲍滨プログラミング
蚕迟と颁++で骋鲍滨プログラミング
seanchas_t
?
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
kimukou_26 Kimukou
?
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
?
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
Keiji Ariyama
?
続?ゲンバの厂飞颈蹿迟
続?ゲンバの厂飞颈蹿迟続?ゲンバの厂飞颈蹿迟
続?ゲンバの厂飞颈蹿迟
Yuichi Adachi
?
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
AdvancedTechNight
?

闯顿碍8で変わる闯补惫补プログラミング