SlideShare une entreprise Scribd logo
1  sur  64
Télécharger pour lire hors ligne
10のJava9で変わるJava8の嫌なとこ!
● Java9で解決されるJava8で嫌なことランキング
– 個人的主観に基づく
– どのように解決されるかを紹介
– Java9に上げるときに,気をつけることなども紹介
●
細かくは紹介しないので,気になったものがあった
ら調べてください
– 過去のリリースの既知の事も詳しく説明しない
Jigsaw(モジュール化)
JShell(JavaのREPL)
G1GCデフォルト化
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>
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にアクセスできなくなる!?
他にも
● 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

Contenu connexe

Tendances

LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15歩 柴田
 
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用Deep Learning JP
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料SECCON Beginners
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptotrmr
 
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかsuno88
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
Single-cell pseudo-temporal ordering 近年の技術動向
Single-cell pseudo-temporal ordering 近年の技術動向Single-cell pseudo-temporal ordering 近年の技術動向
Single-cell pseudo-temporal ordering 近年の技術動向Ryohei Suzuki
 
画像認識における特徴表現 -SSII技術マップの再考-
画像認識における特徴表現 -SSII技術マップの再考-画像認識における特徴表現 -SSII技術マップの再考-
画像認識における特徴表現 -SSII技術マップの再考-Hironobu Fujiyoshi
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめMitsutoshi Kiuchi
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
Data-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組みData-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組みTakeshi Suzuki
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic CloudElasticsearch
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
大規模データ時代に求められる自然言語処理
大規模データ時代に求められる自然言語処理大規模データ時代に求められる自然言語処理
大規模データ時代に求められる自然言語処理Preferred Networks
 
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」Tomohisa Ishikawa, CISSP, CSSLP, CISA, CISM, CFE
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~Yuki Hirano
 
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイントセグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイントNaoto Tamiya
 

Tendances (20)

LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
 
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Single-cell pseudo-temporal ordering 近年の技術動向
Single-cell pseudo-temporal ordering 近年の技術動向Single-cell pseudo-temporal ordering 近年の技術動向
Single-cell pseudo-temporal ordering 近年の技術動向
 
画像認識における特徴表現 -SSII技術マップの再考-
画像認識における特徴表現 -SSII技術マップの再考-画像認識における特徴表現 -SSII技術マップの再考-
画像認識における特徴表現 -SSII技術マップの再考-
 
210519smartcity101
210519smartcity101210519smartcity101
210519smartcity101
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
Data-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組みData-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組み
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloud
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
大規模データ時代に求められる自然言語処理
大規模データ時代に求められる自然言語処理大規模データ時代に求められる自然言語処理
大規模データ時代に求められる自然言語処理
 
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」
金融ISAC アニュアルカンファレンス 2020:Intelligence Driven Securityの「ことはじめ」
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイントセグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
セグメント?クラスタリング? ユーザーを分類し、サービスの改善に活かすポイント
 

En vedette

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
 

En vedette (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
 

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

Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
思ったほど怖くない! 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
 

Similaire à 10のJava9で変わるJava8の嫌なとこ! (20)

Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
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言語によるユーザ定義関数の作り方
 

Plus de 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
 

Plus de 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]
 

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