SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
10のJava9で変わるJava8の嫌なとこ!
● Java9で解決されるJava8で嫌なことランキング
– 個人的主観に基づく
– どのように解決されるかを紹介
– Java9に上げるときに,気をつけることなども紹介
●
細かくは紹介しないので,気になったものがあった
ら調べてください
– 過去のリリースの既知の事も詳しく説明しない
Jigsaw(モジュール化)
JShell(JavaのREPL)
G1GCデフォルト化
10のJava9で変わるJava8の嫌なとこ!
10位
コンパイルに時間かかりすぎ
コンパイルに時間かかりすぎ
class C<T> {
C() {}
C(T t) {}
C(C<T> c) {}
static <U> C<U> m(C<U> c) {return c;}
public static void main(String... args) {
C<String> c = m(new C<>(m(new C<>(m(new C<>())))); // 1秒以下
}
}
コンパイルに時間かかりすぎ
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>())))))))))
// ネスト5: Javac(2.02s), ECJ(1.17s)
コンパイルに時間かかりすぎ
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>())))))))))))))
// ネスト7: Javac(14.99s) ECJ(10.82s)
コンパイルに時間かかりすぎ
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>(
m(new C<>())))))))))))))))))))
//ネスト10
コンパイルに時間かかりすぎ
1分?
10分?
20分?
60分/それ以上?
60分以上
コンパイルに時間かかりすぎ
● 型検査とオーバロード解決/型推論は同時に行う
– m(new C<>(expr))
● C(T)と仮定して,exprの型検査とオーバロード解決/型推論
● C(C<U>)と仮定して,exprの型検査とオーバロード解決/型推論
– expr=m(new C<>(expr1))なら指数的に増加
コンパイルに時間かかりすぎ
● オーバロード数Nとすると
– N*3回,exprの型検査とオーバロード解決/型推論
● Strict, Loose, Varargs for each of overloaded methods
Tiered Attribution
● 型検査とオーバーロード解決/型推論を分離
●
型検査
– オーバーロード解決内でやる必要は無かった
● オーバーロード解決/型推論
– 実引数に構造的な型与える
●
推論が必要な場合,型推論情報を持つ
– 何度も同じ式を処理しない(メモ化)
1秒以下
4000倍
9位
Stringの+のコード生成がイケてない
String +のコード生成
String s = “aaa” + hoge + foo
↓
StringBuilder s$sb = new StringBuilder();
s$sb.append(“aaa”).append(hoge).append(foo);
String s = s$sb.toString();
String +のコード生成
● 将来のJDKでFastestStringBuilderが実装されたら
– 過去のJDKでコンパイルされたコード
● StringBuilderに強く依存
● 将来のJDKで動かしてもFastestStringBuilderが使われない
– 実際にこれは過去にあったこと
● StringBufferからStringBuilderに
– 全てのコードをコンパイルし直す必要
●
コンパイラのメンテナンスコスト大
– コード生成処理って,地獄・・・
invokedynamicを使う
public java.lang.String m(java.lang.String, int);
descriptor: (Ljava/lang/String;I)Ljava/lang/String;
flags: ACC_PUBLIC
Code:
stack=2, locals=3, args_size=3
0: aload_1
1: iload_2
2: invokedynamic #5, 0 // InvokeDynamic
#0:makeConcatWithConstants:(Ljava/lang/String;I)Ljava/lang/String;
7: areturn
invokedynamicを使う
●
ライブラリが文字列連結
● 将来のJDKでFastestStringBuilderが実装された
ら
– 過去のJDKでコンパイルされたコード
● FastestStringBuilderが使われる
– コンパイルし直す必要なし!
懸念点
● Android N未満だと動かなくなるかも?
– invokedynamic解釈できない
– -XdstringConcat=inline でレガシーバイトコード生成
8位
匿名クラスにダイアモンド演算子
が使えない!
匿名クラス+ダイアモンド演算子
List<String> list = new ArrayList<String>() {{
add(“hoge”);
}};
// JAX-RS client
List<String> res = target.get(new GenericType<String>(){});
使えるようになります
List<String> list = new ArrayList<>() {{
add(“hoge”);
}};
// JAX-RS client
List<String> res = target.get(new GenericType<>(){});
7位
Javadocイケてない!
検索もできない!
HTML4で時代遅れ!
検索できるようになります!
検索できるようになります!
モジュールがトップに表示
●
頑張ってどのパッケージがどのモジュールに属すか
覚えましょう
6位ぐらい
Deprecated意味ない,情報少ない
@Decprecated
@Deprecated
public void stop() {…}
● どういうDeprecated???
– いつDeprecatedになったの???
– いつか削除されるの???
@Deprecatedが変わる!
@Deprecated(
forRemoval = false, // 将来削除される?
since = “1.2”) // いつからDepr.に?
public void stop() {...}
Changin Depr. In JDK
● add @Deprecated to constructors for boxed primitives (Boolean, Integer, etc.) (JDK-8145468)
● add @Deprecated(forRemoval=true) to the Runtime.traceInstructions and Runtime.traceMethodCalls
methods (JDK-8153330)
● add @Deprecated to various java.applet and related classes (JEP 289)
● add @Deprecated to java.util.Observable and Observer (JDK-8154801)
● add @Deprecated(forRemoval=true) to various superseded security APIs, including java.security.acl (JDK-
8157847), javax.security.cert and com.sun.net.ssl (JDK-8157712), java.security.Certificate (JDK-8157707),
and javax.security.auth.Policy (JDK-8157848)
● add @Deprecated to "legacy collection" implementations Dictionary, Enumeration, Hashtable, Stack, and
Vector (JDK-8145469)
● add @Deprecated to java.util.Timer and TimerTask (JDK-8154799)
● add @Deprecated to the Optional.get method (JDK-8160606)
● add @Deprecated to java.util.Date, Calendar, and related classes (JDK-8164898)
● add @Deprecated to java.lang.Compiler (JDK-4285505)
● add @Deprecated to the java.corba module
● modify already-deprecated methods Thread.destroy(), Thread.stop(Throwable), Thread.countStackFrames(),
System.runFinalizersOnExit(), and various disused Runtime and SecurityManager methods to have
@Deprecated(forRemoval=true) (JDK-8145468)
● remove @Deprecated from java.awt.Component.show and hide
警告のルールも変わる!
| API declaration site
use site | not dep. forRemoval
context | false true
+----------------------------------
not dep. | 警告 警告
forRemoval=false | 警告
forRemoval=true | 警告
@SuprressWarning
● “deprecation”
– forRemoval = falseの警告を抑制
● “removal”
– forRemoval = trueの警告を抑制
●
両方抑えたかったら
– @SuppressWarning({“deprecation”, “removal”})
jdeprscan
● jar内のDeprecatedなAPIの使用を検出
5位
Collectionのstaticファクトリー無いの不便
初期値付き不変コレクション生成
● Arrays.asList(“abc”);
● Set<String> s = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList(“abc”)));
● Collections.unmodifiableSet(
new HashMap<Integer, String>() {{
put(0, “hoge”);
}});
staticファクトリーできました!
● List#of
– List.of(“abc”)
● Set#of
– Set.of(“abc”)
● Map#of
– Map.of(0, “hoge”)
– Map.ofEntries(Map.entry(0, “hoge”))
● それぞれ0〜10要素までオーバロード
– それ以上は可変長引数
●
全てイミュータブル
– 変更,追加しようとすると例外
Guava使ってるなら要らない?
4位
Stream全然便利じゃない!
Infinit Stream
Stream.iterate(1, i → i*2+3)...
Stream.generate(() → new Hoge())...
● このまま終端操作を実行すると,無限ループに
– forEach, collect, reduce
– Finite Streamにする必要がある
To Finite Stream
● limit(n)
– 先頭からn件の有限Streamに
●
これ以外に手段がない!
– ある条件を満たすまで,とか
条件でskip/limitできるように
● takeWhile(Predicate)
– 条件でlimit
– Stream.iterate(1, i → i*2+3)
.takeWhile(i → i < 100)...
● dropWhile(Predicate)
– 条件を満たす間skip
for文的Stream生成
● Stream#iterate(T t, Predicate p, T→T next)
– for (T t; p.test(t); t = next.apply(t)) {…}
– Stream.iterate(2, i → i<100, i → i*2+3)
StreamとOptionalの相互運用
● List<Optional<String>> opts = …;
● opts.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.・・・
StreamとOptionalの相互運用
● List<Optional<String>> opts = …;
● opts.stream()
.flatMap(Optional::stream)
.・・・
その他
● Stream<LocalDate> LocalDate.datesUntil(
LocalDate endExclusive)
● Stream<LocalDate> LocalDate.datesUntil(
LocalDate endExclusive, Period step)
● Stream<String> Scanner.tokens()
● Stream<MatchResult> Scanner.findAll(Pattern pattern)
● Stream<MatchResult> Matcher.results()
3位
Javaのバージョン意味不明
いままでのJavaバージョン
● JDK 7 Update 55
–
● JDK 7 Update 60
–
いままでのJavaバージョン
● JDK 7 Update 55
– セキュリティーアップデート(CPU)
● JDK 7 Update 60
– マイナーアップデート
●
どちらも同じセキュリティーパッチが入っている
バージョンスキームが変わります
● Java $MAJOR.$MINOR.$SECURITY
– Java 9.1.3
● Java9
● マイナーバージョンアップ1回
● セキュリティー3回
● -$PRE+$BUILD-$OPT
– -$PRE: eaとかの情報
– +$BUILD: ビルドナンバー
– -$OPT: 追加のビルド情報,日付など
Runtime.Versionクラス
Runtime.Version version = Runtime.version();
int major = version.major();
int minor = version.minor();
int security = version.security();
バージョンスキームに依存するコードは
動かなくなるかも!
● System.getProperty("java.version") => "9"
● System.getProperty("java.version").charAt(3)
– 例外に!!
2位
● ちょっとしたAPIの確認面倒くさい!
● もっと気軽にJava書きたい!
jshell; Java REPL Tool来る!
jshell> Runtime.version()
$8 ==> 9-ea+122
jshell> $8.major()
$9 ==> 9
jshell> $8.minor()
$10 ==> 0
jshell> $8.pre()
$11 ==> Optional[ea]
jshell>
10のJava9で変わるJava8の嫌なとこ!
1位
パッケージ管理イケてない!
クラスパス地獄
public is too public
モジュール化(Jigsaw)
// module-info.java
module mymodule {
requires java.compiler;
// java.compilerというモジュールを利用
// java.compilerモジュールファイルで
// exportされているパッケージ内のpublicクラスが利用可
exports com.mymodule.util;
// com.mymodule.util内のpublicクラスを他モジュールが利用可に
}
モジュール化すると・・・?
●
クラスパスの指定がほぼ要らなくなる
– modulepathを指定する
● ディレクトリ1つだけ
● public classの可視性を管理できる
⇔今まで使用してた内部APIにアクセスできなくなる!?
10のJava9で変わるJava8の嫌なとこ!
他にも
● HTTP2.0
● Compact Strings
● VarHandle
● G1GCデフォルト化
– CMSがDeprecatedに
● javacの-releaseオプション
● Applet APIがDeprecatedに
More Future(Java 10〜)
● ローカル変数でvalが!
– val hoge = “hoge”;
●
ジェネリクスの特殊化
– List<int> ints;
●
値型
– 構造体みたいなの
– メモリ使用量削減
● Foreign Function Interface

Weitere ähnliche Inhalte

Was ist angesagt?

バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenEyes, JAPAN
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみToshihiro Nakamura
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Yuji Kubota
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency APITaku Miyakawa
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決オラクルエンジニア通信
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 

Was ist angesagt? (20)

バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
 
Metaspace
MetaspaceMetaspace
Metaspace
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 

Andere mochten auch

Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要HonMarkHunt
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsawtakezoe
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
Cloud formation デザイナーで捗ろう
Cloud formation デザイナーで捗ろうCloud formation デザイナーで捗ろう
Cloud formation デザイナーで捗ろうkoki abe
 
Migration from Swing to JavaFX
Migration from Swing to JavaFXMigration from Swing to JavaFX
Migration from Swing to JavaFXYuichi Sakuraba
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAmazon Web Services Japan
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいSugawara Genki
 
Project Jigsaw #kanjava
Project Jigsaw #kanjavaProject Jigsaw #kanjava
Project Jigsaw #kanjavaYuji Kubota
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjugYuji Kubota
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCLFastly
 
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てRyosuke Uchitate
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAmazon Web Services
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Takuya Okada
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Kohei Saito
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 

Andere mochten auch (15)

Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsaw
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Cloud formation デザイナーで捗ろう
Cloud formation デザイナーで捗ろうCloud formation デザイナーで捗ろう
Cloud formation デザイナーで捗ろう
 
Migration from Swing to JavaFX
Migration from Swing to JavaFXMigration from Swing to JavaFX
Migration from Swing to JavaFX
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしい
 
Project Jigsaw #kanjava
Project Jigsaw #kanjavaProject Jigsaw #kanjava
Project Jigsaw #kanjava
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
 
AWS CloudFormation Best Practices
AWS CloudFormation Best PracticesAWS CloudFormation Best Practices
AWS CloudFormation Best Practices
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 

Ähnlich wie 10のJava9で変わるJava8の嫌なとこ!

思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)Takuya Tsuchida
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについてdekosuke
 
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallなおき きしだ
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellIntroduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellbitter_fox
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Yuichi Sakuraba
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部NVIDIA Japan
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016Yoshio Terada
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 

Ähnlich wie 10のJava9で変わるJava8の嫌なとこ! (20)

Junit4
Junit4Junit4
Junit4
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellIntroduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshell
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 

Mehr von bitter_fox

Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavabitter_fox
 
JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪bitter_fox
 
Brand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIBrand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIbitter_fox
 
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fkbitter_fox
 
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]bitter_fox
 
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)bitter_fox
 
Lt (コピー)
Lt (コピー)Lt (コピー)
Lt (コピー)bitter_fox
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]bitter_fox
 

Mehr von bitter_fox (9)

Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
 
JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪
 
Brand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIBrand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPI
 
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
 
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
 
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
 
Lt (コピー)
Lt (コピー)Lt (コピー)
Lt (コピー)
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
 

Kürzlich hochgeladen

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...yoshidakids7
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也harmonylab
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 

Kürzlich hochgeladen (13)

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 

10のJava9で変わるJava8の嫌なとこ!