人気ブログランキング |

ボイラープレートコード撲滅er Lombok 2

昨日の続き。
いろいろ試した。




まず、どうやらデータクラスを作るアノテーションは@Dataだけではないようだ。
正確にはデータクラスではなくイミュータブルクラスだが、
@Valueを使用して以下のように作成する。
ボイラープレートコード撲滅er Lombok 2_f0155972_15174152.png


ボイラープレートコード撲滅er Lombok 2_f0155972_14461475.png

簡単な仕様説明は図内に記載しているが、
イミュータブルクラスとは要は一度定義したら変更できないクラスであり、
コンストラクタによって初期値を決めたら、取得(getter)のみが許される。




@Dataや@Valueとは別に、@Getter/@Setterというものもある。
これを利用することでメンバ個別にgetter/setterを追加できる。

また、AccessLevel.HOGEを使用することで、
getter/setterの可視性を変更することもできる。

以下の例では、idのsetterの可視性をpackage privateにした。
(アウトラインのsetId()のアイコンがになっている。)
ボイラープレートコード撲滅er Lombok 2_f0155972_14454420.png




次に@SneakyThrowsというのが便利そうだったので試してみた。
ボイラープレートコード撲滅er Lombok 2_f0155972_14454685.png

void run()にはthrows句が無いが、コンパイルエラーが出ていない。

Lombok内では、例外をcatchした後、その例外をLombok.sneakyThrow(Throwable)の引数として渡している。
同メソッドはRuntimeExceptionなので、メソッド内で発生する例外がすべて非チェック例外となり、コンパイルエラーが出なくなるという仕組みだ。

実際に例外が発生した場合は、通常の非チェック例外と同じような標準エラー出力が(ちゃんと対象のチェック例外を起点として)なされる。
まぁ失敗しねぇだろというチェック例外には使ってもいいかもしれない。
(公式サイトでは文字コードをutf8に変換しようとする際のUnsupportedEncodingExceptionを省略するサンプルがある。)



最後に@Cleanup
その名が示す通り後処理をうまいことやってくれる。
ここでは、java.io.Closeable.close()を叩いてくれるようだ。
ボイラープレートコード撲滅er Lombok 2_f0155972_1446035.png


Java7でオートクロージャーが話題となったが、
オートクロージャーの対象とするには try(closeable) と書く必要があるため
結局try-catch-finally句を記述しなければならない。

先に上げた@SneakyThrowsでメソッド内例外を非チェックにすれば
標準入力からキー入力を得るメソッドが上のように記述できる。
煩わしい例外処理やクローズ処理が消えてすっきりとした。

比較のために、普通に書いたらこんな感じというのも書いた。
#あまりにガバガバかもしらん。Java初心者なんですいません。
ボイラープレートコード撲滅er Lombok 2_f0155972_1444377.png







他にも、それぞれのアノテーションには
@Setter/@GetterのAccessLevel.HOGEのような引数を設定できるようだ。
いずれ紹介できれば。



まじめなJava開発を再開したら追記するかも。
by hsls | 2014-12-10 15:17 | 技術記事


<< WebLogicで組み込みEJ... ボイラープレートコード撲滅er... >>