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
860
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
2.2k
Other Decks in Programming
See All in Programming
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
230
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
430
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.8k
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
790
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1k
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
300
「抽象に依存せよ」が分からなかった新卒1年目の私が Goのインターフェースと和解するまで
kurogenki
0
110
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
260
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
180
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
540
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
320
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Invisible Side of Design
smashingmag
302
51k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
970
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Everyday Curiosity
cassininazir
0
160
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
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