Lombokの@SneakyThrows はチェック例外を非チェック例外にして投げ直してくれる機能
チェック例外は try - catch で捕獲する必要がありコードが若干冗長になってしまう、そこで@SneakyThrows
を使うとチェック例外を非チェック例外のように扱えるのでコードがスッキリするメリットがある
例えば以下のようなコードが
public String utf8ToString(byte[] bytes) { try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); }
次のように書ける
@SneakyThrows public String utf8ToString(byte[] bytes) { return new String(bytes, "UTF-8"); }
実際に生成されるソースコードは以下のように変換される
import lombok.Lombok; ... public String utf8ToString(byte[] bytes) { try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { throw Lombok.sneakyThrow(e); } }
この時、lombok.jarがクラスパスになければ動作しないように思えたのだが、以下の実装を見る限りバイトコード変換前にこの処理を取り除いて依存関係を排除しているみたい
つまり、lombok.jarはクラスパスに必要なさそうと理解した