SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
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日金曜日

Más contenido relacionado

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

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
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
AdvancedTechNight
 

Similar a JDK8で変わるJavaプログラミング (20)

「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
Mecha-Mozilla
Mecha-MozillaMecha-Mozilla
Mecha-Mozilla
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
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
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
 
QtとC++でGUIプログラミング
QtとC++でGUIプログラミングQtとC++でGUIプログラミング
QtとC++でGUIプログラミング
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
 
続・ゲンバのSwift
続・ゲンバのSwift続・ゲンバのSwift
続・ゲンバのSwift
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 

Último

Último (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

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