Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaにおけるNull非許容性
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yuichi.Sakuraba
February 27, 2025
Technology
2
3.8k
JavaにおけるNull非許容性
2025.02.28 Server-Side Kotlin Meetup 発表資料
Yuichi.Sakuraba
February 27, 2025
Tweet
Share
More Decks by Yuichi.Sakuraba
See All by Yuichi.Sakuraba
Java 25に至る道
skrb
3
260
Lazy Constant - finalフィールドの遅延初期化
skrb
0
2.9k
Language Update: Java
skrb
2
430
Java 30周年記念! Javaの30年をふりかえる
skrb
4
3.7k
あなたはJVMの気持ちを理解できるか?
skrb
6
30k
で、ValhallaのValue Classってどうなったの?
skrb
2
14k
Javaにおける関数型プログラミンへの取り組み
skrb
7
680
今こそ、ラムダ式を考える - なぜあなたはラムダ式を苦手と感じるのか
skrb
6
26k
今こそ、ラムダ式を考える - ラムダ式はどうやって動くのか
skrb
7
12k
Other Decks in Technology
See All in Technology
ビズリーチにおける検索・推薦の取り組み / DEIM2026
visional_engineering_and_design
1
140
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.7k
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
480
DX Improvement at Scale
ntk1000
3
450
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
メタデータ同期に潜んでいた問題 〜 Cache Stampede 時の Cycle Wait を⾒つけた話
lycorptech_jp
PRO
0
160
Databricksアシスタントが自分で考えて動く時代に! エージェントモード体験もくもく会
taka_aki
0
370
AIエージェント時代に備える AWS Organizations とアカウント設計
kossykinto
3
660
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.5k
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
360
トップマネジメントとコンピテンシーから考えるエンジニアリングマネジメント
zigorou
4
820
ナレッジワークのご紹介(第88回情報処理学会 )
kworkdev
PRO
0
170
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
150
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
440
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
Marketing to machines
jonoalderson
1
5k
Paper Plane (Part 1)
katiecoart
PRO
0
5.4k
Designing for humans not robots
tammielis
254
26k
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
JavaにおけるNull非許容性 櫻庭 祐一
OpenJDK における新機能導入プロセス JEP: JDK Enhance Proposal Draft JEP 1st Preview
JEP n th Preview JEP Standard JEP 最低 2 回 差し戻しあり 本日のトピックは この段階 今後、 変更される可能性大
これまでの null に対する Java の取り組み null 参照型における 参照先がない状態 処理結果がない エラーなどを表す
本来の意味 副次的な意味 型アノテーション @NonNull List<@NonNull String> texts = ... Optional Optional<String> o = Optional.ofNullable(...); @NonNull が標準になっていないなど、 取り組みが成功しているとは言いがたい ...
Java の大きな流れ 重厚長大 長寿命 可変 オブジェクト 軽量 短寿命 不変 オブジェクト
ラムダ式 (Java 8) 処理とデータの分離 Record (Java 16) Sealed (Java 17) 代数的データ型 パターンマッチング (Java 16 ~ ) 型による処理の分岐 Value Class (Java ??) 値オブジェクト
Value Class 例) record Point(int x, int y) {} Point[]
Point x y Point x y Point x y Heap Point[] x y x y x y Heap value record Point(int x, int y) {} Value Class 化 ヒープ平坦化 参照をたどる必要なし オブジェクトヘッダーなし キャッシュミス低減
Value Class と Null 非許容型 Value Class によるヒープ平坦化 null があると余分なフラグやチェックが必要
最適化の効率が薄れる Null 非許容型の導入へ
Null 非許容型 / Null 許容型 JEP Draft: Null-Restricted Value Class
Types JEP Draft: Null-Restricted and Nullable Types https://openjdk.org/jeps/8316779 https://openjdk.org/jeps/8303099 String! Null 非許容型 (Null-Restricted Type) String? Null 許容型 (Nullable Type) ワイドニング変換 オブジェクト初期化順序の変更 配列初期化構文 ジェネリクス型パラメータへの適用 et al.
オブジェクト初期化順序の変更 class Foo { ... } class Bar extends Foo
{ Baz baz; Bar(Baz baz) { super(); this.baz = baz; } } スーパークラスのコンストラクタは 常にコンストラクタの先頭でコール このためフィールドが未初期化状態にある class Foo { ... } class Bar extends Foo { Baz baz; Bar(Baz baz) { this.baz = baz; super(); } } スーパークラスのコンストラクタを フィールド初期化後にコール可能
Conclusion 軽量不変オブジェクトへの流れ JVM 効率化としての Value Class と Null 非許容 Value
Class でなくても Null 非許容は使用可能 決まっていないことが多いが、 期待して待ちましょう