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
0
770
JavaとKotlinで例外処理の相性が悪いなと思った瞬間(2023/09/29 Server-Side Kotlin Meetup vol.10 )
Server-Side Kotlin Meetup vol.10 登壇資料 (少しおまけつき)
wkwkhautbois
September 29, 2023
Tweet
Share
More Decks by wkwkhautbois
See All by wkwkhautbois
日付と闘う-和暦は難しい / vs Dates - Japanese Chronology is Difficult
wkwkhautbois
1
1.5k
Other Decks in Programming
See All in Programming
PHPUnitの限界をPlaywrightで補完するテストアプローチ
yuzneri
0
350
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
2
730
Google I/O Extended Incheon 2025 ~ What's new in Android development tools
pluu
1
200
[DevinMeetupTokyo2025] コード書かせないDevinの使い方
takumiyoshikawa
2
220
階層化自動テストで開発に機動力を
ickx
1
440
型で語るカタ
irof
1
860
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
3
1.8k
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
17
6.2k
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
180
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
270
iOS開発スターターキットの作り方
akidon0000
0
210
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
320
Featured
See All Featured
Facilitating Awesome Meetings
lara
54
6.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
A Tale of Four Properties
chriscoyier
160
23k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
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