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とKotlinで例外処理の相性が悪いなと思った瞬間(2023/09/29 Server...
Search
wkwkhautbois
September 29, 2023
Programming
890
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaとKotlinで例外処理の相性が悪いなと思った瞬間(2023/09/29 Server-Side Kotlin Meetup vol.10 )
Server-Side Kotlin Meetup vol.10 登壇資料 (少しおまけつき)
wkwkhautbois
September 29, 2023
More Decks by wkwkhautbois
See All by wkwkhautbois
日付と闘う-和暦は難しい / vs Dates - Japanese Chronology is Difficult
wkwkhautbois
1
2.4k
Other Decks in Programming
See All in Programming
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
450
Creating Composable Callables in Contemporary C++
rollbear
0
190
Vite+ Unified Toolchain for the Web
naokihaba
0
670
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
13
2.6k
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
280
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
140
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
360
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
200
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
120
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
830
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
670
The Pragmatic Product Professional
lauravandoore
37
7.4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Amusing Abliteration
ianozsvald
1
220
Faster Mobile Websites
deanohume
310
32k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Code Reviewing Like a Champion
maltzj
528
40k
KATA
mclloyd
PRO
35
15k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
HDC tutorial
michielstock
2
730
Transcript
JavaとKotlinで例外処理の相性が悪いな と思った瞬間 by わくわく (シェルフィー株式会社 桑原大樹)
はじめに ◼ 桑原大樹(わくわく) ⚫ Twitter(X) @wkwk_hautbois ◼ シェルフィー株式会社で Kotlin +
Spring で開発してます (メンバー積極採用中です) https://hello.shelfy.co.jp/8d9cbc353fb3481a92738215efd55110
本日のテーマは Java ↔ Kotlin の呼び出しで 「検査例外」関連で ムムム..と思った点です
目次 ◆似た関数、異なる例外… ◆え、スローされるんだけど…? ◆見逃すと危ない:Springのトランザクション制御との相性
目次 ➢ 似た関数、異なる例外 ◆え、スローされるんだけど…? ◆見逃すと危ない:Springのトランザクション制御との相性
検査例外 ◼ Javaには検査例外という仕組みがある ⚫ スローされる例外が ある程度 認知できる Java Java とサブクラスは省略可(非検査例外)
Kotlinは見た目から例外の判断が難しい ◼ Kotlinの場合 ⚫ 検査例外がない( 節がない) ⚫ Javaのメソッド? Kotlinの拡張関数? そっくり
throws節が無いと 適切にcatchするの 大変じゃない? Kotlin Kotlin
目次 ◆似た関数、異なる例外 ➢ え、スローされるんだけど ? ◆見逃すと危ない: Springのトランザクション制御との相性
Kotlinではコンパイル結果にthrows節がつかない ◼ Kotlinはコンパイル結果にも は付かない ⚫ Kotlinからスローされる検査例外を Javaで しようとするとコンパイルエラーに Java これは困った
Javaでコンパイルを通すために ◼ をつけるとコンパイル結果に 節がつく ⚫ Javaからも認識できるように ライブラリ組むとき 忘れそう&大変 Kotlin
目次 ◆似た関数、異なる例外 ◆え、スローされるんだけど…? ➢ 見逃すと危ない:Springのトランザクション制御との相性
SpringFrameworkの ◼ デフォルトだと ⚫ 非検査例外はロールバックされる ⚫ 検査例外はコミットされる 検査例外に思想を持った ライブラリ/FWと相性が… Kotlin
で事故を起こさないために ◼ Issueで提起はされているが… ⚫ 4年間対応なかった ⚫ 今週(2023/09/25) 6.2.xマイルストーンに乗った https://github.com/spring-projects/spring-framework/issues/23473 1年以上先だろうけど…
まとめ ◼ Kotlin ↔ Java呼び出しで 検査例外と相性が悪いときがある ⚫ スローする例外の種類がわかりにくい ◦ 特にJavaとKotlinで似たメソッドを呼ぶときなど混乱しそう
⚫ Java→Kotlin呼び出し時はKotlin側でシグネチャに意識が必要 ◦ @throwsをつける必要あり ⚫ ライブラリ/FWの思想とマッチしない可能性が ◦ 代表例がSpringFrameworkのトランザクション制御
おまけ
(Lombok) と ◼ JavaでもLombokを使うと 検査例外を 節なしでスローできる ⚫ このときは 検査例外でもロールバックされる (※Spring
AOPのプロキシ実装に依存する) Java
◼ CGLibプロキシはKotlinかそれ以外かで処理が分岐する ⚫ 前頁の例は非検査例外にラップされるのでロールバック対象になる Java CglibAopProxy.java
例外処理に気をつけて Kotlinを楽しみましょう! シェルフィー株式会社で一緒に開発したい人を募集中です https://hello.shelfy.co.jp/8d9cbc353fb3481a92738215efd55110