Magicode logo
Magicode
4

(Java)Stream/Optionalで例外をthrowするとコンパイルエラーになる(回避策)

5 min read

はじめに

ラムダ式の検査例外を非検査化する方法を調べた際のメモです

前提

Javaのラムダ式にて検査例外(Exceptionを継承した例外)を処理した場合

IOExceptionを上位にthrowしたため、ラムダ内部のIOExceptionも上位のクラス内部で処理したいところですが、コンパイルエラーとしてビルドに失敗します。

実装

上記を回避するためには検査例外をビルドに通すか内部で都度例外発生時に処理をしなければなりません。 そのため、java-sneaky-throwsという方法で例外の発生を隠蔽してしまうという実装方法です。

上記のやり方でラムダ内での例外発生を無視をし、 func1(),func2()を実行した際に上位で期待した例外をcatchすることができます。

終わりに

非検査例外が検査例外となった際などの応急処置としては有用だと思います。

「検査例外を無理やり非検査例外化する」処理を入れて対応するのはいかがなものかという気はしますが、 対象の処理内で発生する例外を上位にthrowする、またはtry-catchにて発生する可能性がある例外をきちんと処理する等の実装者のモラル的なところにもなるかと思いますので、ある程度メンバーがJavaに慣れている環境や一人親方での実装の際は検討してもいいと思います。

Discussion

コメントにはログインが必要です。