SlideShare a Scribd company logo
1 of 18
Download to read offline
#ccc_g11
Copyright 2017 Hiroyuki Onaka
この作品は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
JDK9の真の目玉機能はこれだ!
2017/6/24 KANJAVA PARTY 2017 !!!
大中浩行(@setoazusa)
#ccc_g11
Copyright 2017 Hiroyuki Onaka
今日はお疲れ様でした!
• 大中浩行
• @setoazusa(せとあず)
• 横浜から来ました(神奈川から来たとは言わない)
#ccc_g11
Copyright 2017 Hiroyuki Onaka
宣伝
コミックマーケット92
8/11(金・山の日) 東地区 "そ"ブロック-39b
「ふぃーるどのーつ」
TDDとBDDの本出します!
→通販もやります! https://fieldnotes.booth.pm/
#ccc_g11
Copyright 2017 Hiroyuki Onaka
JDK9 2017/9/21 リリース予定!
やはり目玉はProject Jigsaw!
JShellも注目ですね!
JavaDocの検索機能等の改善も嬉しいポイントです!
#ccc_g11
Copyright 2017 Hiroyuki Onaka
だがしかし
私がここで紹介したいのは、標準API内のjava.util.Mapです。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
今までよくあった、Mapの初期化のコード
Map<Integer, String> map = new HashMap<>() {
{
put(1, "あなたと");
put(2, "JAVA");
put(3, "今すぐ");
put(4, "ダウンロード");
}
};
#ccc_g11
Copyright 2017 Hiroyuki Onaka
JDK9から、Mapのstatic factoryメソッドが追加されました!
http://download.java.net/java/jdk9/docs/api/java/util/Map.html
Map<Integer,String> map = Map.of(1, "あなたとJAVA");
#ccc_g11
Copyright 2017 Hiroyuki Onaka
え、KeyとValueの組み合わせが2つある場合はどうなるのかっ
て?
#ccc_g11
Copyright 2017 Hiroyuki Onaka
Map<Integer,String> map = Map.of(1, "あなたとJAVA",
2, "今すぐダウンロード");
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「君は引数を6つ取るのが得意なフレンズなんだね!」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「へーきへーき!引数によって得意なことは違うから!」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
組み合わせが11通り以上の時はどうするのか
どうもしません
普通にHashMap(またはその派生クラス)作ってください
※(6/25追記) java.util.Map.entryをstatic importすることで、以下
の様に書けます(@toriken0425 さんありがとうございます)
)Map<Integer,String> map = Map.ofEntries(entry(1,"あ
"), entry(2, "な"), entry(3, "た")..);
#ccc_g11
Copyright 2017 Hiroyuki Onaka
解説
引数が (K, V, K, V…)となるため、単一の型の繰り返しになる可
変長引数は使えないわけです。
なので、引数の型の繰り返しをベタにならべることでこのイン
ターフェースを実現しています。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
実は、言語仕様にTupleを持っていない言語でこういう型の組み
合わせを実現しようとする場合は、こういうインターフェースは
一般的。
こういう場合にbuilderやfactoryメソッドを使って頑張っていた
Javaのほうがむしろ例外。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
例: .NET FrameworkのTupleクラス
https://msdn.microsoft.com/ja-jp/library/system.tuple(v=vs.110).aspx
#ccc_g11
Copyright 2017 Hiroyuki Onaka
まとめ
• 普段何気なく使っている標準クラスにも、JDKのバージョン
アップでAPIは追加されていきます
• JavaDocを読み返してみると、思わぬ発見があるかも?
#ccc_g11
Copyright 2017 Hiroyuki Onaka
あなたとJAVA,
今すぐダウンロード
#ccc_g11
Copyright 2017 Hiroyuki Onaka
ありがとうございました!
• 大中浩行(Onaka,Hiroyuki)
• @setoazusa
• グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
• http://hiroyuki.fieldnotes.jp/

More Related Content

More from Hiroyuki Ohnaka

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱いHiroyuki Ohnaka
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験Hiroyuki Ohnaka
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...Hiroyuki Ohnaka
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプルHiroyuki Ohnaka
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescriptHiroyuki Ohnaka
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版Hiroyuki Ohnaka
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版Hiroyuki Ohnaka
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘いHiroyuki Ohnaka
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Hiroyuki Ohnaka
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」Hiroyuki Ohnaka
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)Hiroyuki Ohnaka
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcHiroyuki Ohnaka
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)Hiroyuki Ohnaka
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約Hiroyuki Ohnaka
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記Hiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
 

JDK9の真の目玉機能はこれだ!

  • 1. #ccc_g11 Copyright 2017 Hiroyuki Onaka この作品は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。 JDK9の真の目玉機能はこれだ! 2017/6/24 KANJAVA PARTY 2017 !!! 大中浩行(@setoazusa)
  • 2. #ccc_g11 Copyright 2017 Hiroyuki Onaka 今日はお疲れ様でした! • 大中浩行 • @setoazusa(せとあず) • 横浜から来ました(神奈川から来たとは言わない)
  • 3. #ccc_g11 Copyright 2017 Hiroyuki Onaka 宣伝 コミックマーケット92 8/11(金・山の日) 東地区 "そ"ブロック-39b 「ふぃーるどのーつ」 TDDとBDDの本出します! →通販もやります! https://fieldnotes.booth.pm/
  • 4. #ccc_g11 Copyright 2017 Hiroyuki Onaka JDK9 2017/9/21 リリース予定! やはり目玉はProject Jigsaw! JShellも注目ですね! JavaDocの検索機能等の改善も嬉しいポイントです!
  • 5. #ccc_g11 Copyright 2017 Hiroyuki Onaka だがしかし 私がここで紹介したいのは、標準API内のjava.util.Mapです。
  • 6. #ccc_g11 Copyright 2017 Hiroyuki Onaka 今までよくあった、Mapの初期化のコード Map<Integer, String> map = new HashMap<>() { { put(1, "あなたと"); put(2, "JAVA"); put(3, "今すぐ"); put(4, "ダウンロード"); } };
  • 7. #ccc_g11 Copyright 2017 Hiroyuki Onaka JDK9から、Mapのstatic factoryメソッドが追加されました! http://download.java.net/java/jdk9/docs/api/java/util/Map.html Map<Integer,String> map = Map.of(1, "あなたとJAVA");
  • 8. #ccc_g11 Copyright 2017 Hiroyuki Onaka え、KeyとValueの組み合わせが2つある場合はどうなるのかっ て?
  • 9. #ccc_g11 Copyright 2017 Hiroyuki Onaka Map<Integer,String> map = Map.of(1, "あなたとJAVA", 2, "今すぐダウンロード");
  • 10. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「君は引数を6つ取るのが得意なフレンズなんだね!」
  • 11. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「へーきへーき!引数によって得意なことは違うから!」
  • 12. #ccc_g11 Copyright 2017 Hiroyuki Onaka 組み合わせが11通り以上の時はどうするのか どうもしません 普通にHashMap(またはその派生クラス)作ってください ※(6/25追記) java.util.Map.entryをstatic importすることで、以下 の様に書けます(@toriken0425 さんありがとうございます) )Map<Integer,String> map = Map.ofEntries(entry(1,"あ "), entry(2, "な"), entry(3, "た")..);
  • 13. #ccc_g11 Copyright 2017 Hiroyuki Onaka 解説 引数が (K, V, K, V…)となるため、単一の型の繰り返しになる可 変長引数は使えないわけです。 なので、引数の型の繰り返しをベタにならべることでこのイン ターフェースを実現しています。
  • 14. #ccc_g11 Copyright 2017 Hiroyuki Onaka 実は、言語仕様にTupleを持っていない言語でこういう型の組み 合わせを実現しようとする場合は、こういうインターフェースは 一般的。 こういう場合にbuilderやfactoryメソッドを使って頑張っていた Javaのほうがむしろ例外。
  • 15. #ccc_g11 Copyright 2017 Hiroyuki Onaka 例: .NET FrameworkのTupleクラス https://msdn.microsoft.com/ja-jp/library/system.tuple(v=vs.110).aspx
  • 16. #ccc_g11 Copyright 2017 Hiroyuki Onaka まとめ • 普段何気なく使っている標準クラスにも、JDKのバージョン アップでAPIは追加されていきます • JavaDocを読み返してみると、思わぬ発見があるかも?
  • 17. #ccc_g11 Copyright 2017 Hiroyuki Onaka あなたとJAVA, 今すぐダウンロード
  • 18. #ccc_g11 Copyright 2017 Hiroyuki Onaka ありがとうございました! • 大中浩行(Onaka,Hiroyuki) • @setoazusa • グロースエクスパートナーズ株式会社 アーキテクチャソリューション部 テクニカルリード • http://hiroyuki.fieldnotes.jp/