はじめに
あるプロジェクトのソースをインポートすると、ビルドエラーがいっぱいありました。
XXXBuilderが存在しないようなエラーがいっぱいあります。
build.gradleを見るとlombokのライブリを使ってますが、実はIDEにもLombokのプラグインインストールする必要があります。
Lombok
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Spring Tool Suite
lombokダウンロード
lombok JARにダブルクリック
Specify location をクリックして、STSのフォルダー選択
Selectボタンを押す
Install / update をクリック
インストール完了。
Idea
File ⇒ Settings ⇒ Plugins ⇒ lombok入力して検索
Installedにすでに存在する場合はインストールする必要がありません。
MarketPlaceタブに選択して、lombok入力して検索
Installボタンを押す
Restart IDEボタンを押して完了。
VSCode
Lombok Annotations Support for VS Codeという拡張を使ってビルドエラー回避できます。
https://marketplace.visualstudio.com/items?itemName=GabrielBB.vscode-lombok
「Lombok Annotations Support for VS Code」をインストール
Installボタンを押す
インストールした後、念の為VSCodeを再起動
Lombokの使い方
Lombok features
build.gradleにlombokライブラリ追加
// https://mvnrepository.com/artifact/org.projectlombok/lombok
compile group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
@Getter
/@Setter
わかりやすいですが、getter,setterメソッドを自動生成します。
@ToString
toStringメソッドは、@ToString(exclude = "age", callSuper = false)
のように定義して制御
除外されたageフィールドのみ未使用となっています。
@EqualsAndHashCode
hashCode,equals,canEqual3つのメソッドが生成します。
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
@Value
@Builder
@Data
上記の例の通り、下記らのアノテーションのまとめです。
@ToString
@EqualsAndHashCode
- すべての非finalフィールドの
@Getter
- すべての非finalフィールドの
@Setter
@RequiredArgsConstructor
@Log
@Cleanup
リソースを自動解放されるアノテーションです。自分でリソースのclose処理を省略できるので便利です。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import lombok.Cleanup;
public class TestMain {
public static void main(String[] args) throws Exception {
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[1024];
while (true) {
int r = in.read(b);
if (r == -1) {
break;
}
out.write(b, 0, r);
}
}
}
はかもval
, var
, @NonNull
,@Getter(lazy=true)
,@Helper
, @Slf4j
などなどがあります。
これらのアノテーションを使うとBeanクラスの量は削減できて、メンテナンスにも良くなります。
以上