ホームページ >Java >&#&チュートリアル >Java の Lombok プロジェクト
Lombok は、Java のアノテーション プロセッサとして機能するライブラリであり、コードの冗長性を排除するように設計されています。その主な機能は、反復コードまたは「ボイラープレート」、つまり必要ではあるものの、プログラムのロジックに直接の価値を追加しない要素の生成を自動化することです。主に、Java クラスの一般的な要素の中でも特に、ゲッター メソッドとセッター メソッド、コンストラクター、equals()、hashCode()、toString() メソッドのコンパイル時の自動生成に使用されます。
Lombok では、これらの基本関数用に数十行のコードを手動で記述する代わりに、単純な注釈を使用して関数を定義できるため、よりクリーンで保守性が高く、エラーが発生しにくいコードが得られます。
Java プロジェクトで Lombok を使用するには、インストールに加えて、pom.xml ファイル (Maven プロジェクトの場合) または build.gradle (Gradle プロジェクトの場合) に対応する依存関係を追加する必要があります。使用している IDE の対応するプラグイン。この投稿では、例として Maven と IntelliJ IDEA を使用します。
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
疑問がある場合は、いつでもロンボク島の公式ドキュメントを確認できます:
クラスを作成するとき、手動または IDE によって提供されるショートカットを使用して、次のアクションを定期的に実行します。
Lombok には @Data アノテーションがあり、これを 1 行ですべて実行でき、POJO (Plain Old Java Objects) に関連するすべてを生成できます。このアノテーションは、後で説明する @Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor、および @AllArgsConstructor アノテーションを組み合わせたものです。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
これらのアノテーションを使用すると、属性がクラス内で宣言された順序に従って使用されることを考慮して、引数のさまざまな組み合わせを持つコンストラクターを自動的に生成できます。
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
これらのアノテーションを使用すると、クラスのすべての属性に対して、または対応するアノテーションでマークされた属性に対してのみゲッター メソッドとセッター メソッドを自動的に生成できます。つまり、クラス レベルまたは属性レベルで使用できます。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
このアノテーションは toString() メソッドを自動的に生成します。このメソッドはクラスとその属性の文字列表現を次の形式で返します: ClassName(attribute1=value1,attribute2=value2, ...)。デフォルトでは、クラスのすべての非静的属性が結果に含まれますが、@ToString.Exclude 属性を使用して特定の属性を除外できます。宣言された名前ではなく属性の値のみを表示したい場合は、 @ToString(includeFieldNames = false) を使用できます。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Persona { private String nombre; }
クラスのすべての属性から、equals() メソッドと hashCode() メソッドを生成できます。属性を除外または含める場合は、アノテーション @EqualsAndHashCode.Exclude および @EqualsAndHashCode.Include を使用して実行できます。それぞれ。
import lombok.*; @Getter @Setter public class Persona { private String nombre; private String apellido; }
以前の Java では、不変クラスを作成するには、クラスや属性を最終型にするなどの一連の手順を実行する必要があり、セッター メソッドは生成されませんでした。 Lombok では、@Value アノテーションを使用して不変クラスを簡単に作成できます。これは、@Getter、@ToString、@EqualsAndHashCode、および @AllArgsConstructor アノテーションを組み合わせて不変クラスを生成します。すべての属性はプライベート最終としてマークされ、セッター メソッドは生成されません。これは @Data の不変のバリアントです。
import lombok.*; public class Persona { @Getter @Setter private String nombre; private String apellido; }
Java の最近のバージョンでは、このアノテーションはレコードの使用に比べて意味を失います。これは、レコードの目的は同じであり、レコードを使用する方が実用的であるためです。このトピックについてさらに詳しく知りたい場合は、ブログに記録に関するその他の投稿があります。
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
このアノテーションにより、変数を Final として宣言し、そのデータ型を自動的に推論することができます。つまり、変数のデータ型を指定する必要はなく、Lombok がその推論を処理します。これは、変数のデータ型が非常に長いか複雑な場合に便利です。こうすることで繰り返しを避けることができます。
import lombok.Data; @Data public class Persona { private String nombre; }
型推論に Final var または単に var を直接使用すると、このアノテーションの意味が失われる可能性がありますが、これは言語の特性であるため、その方が便利です。これについて詳しく知りたい場合は、次の投稿を参照してください
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
これは @val とまったく同じように機能しますが、変数を Final として宣言せず、単にその型を推測します。 String 型のものを宣言することはできず、それに int 型の値を割り当てることは最終的なものではないため、型推論の概念を考慮する必要があります。繰り返しますが、このアノテーションは、Java の最近のバージョンでは var に置き換えられます。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Persona { private String nombre; }
このアノテーションは、クラス属性とメソッドのパラメーターで使用できます。基本的に、属性の値を null にすることはできないことを示します。@NonNull でマークされた属性に null 値を割り当てようとすると、null 値が割り当てられることになります。 NullPointerException がスローされます。つまり、(param == null) throw new NullPointerException("param は非 null とマークされていますが、null") が使用されます。生成する例外に関係なく、この値を null にすることができないことを何らかの方法で示すため、IDE 自体の中でその使用がより明確になります。
import lombok.*; @Getter @Setter public class Persona { private String nombre; private String apellido; }
このアノテーションにより、close() メソッドがある場合にそれを使用するリソース、または AutoCloseable または Closeable インターフェースを実装するリソースが、そのアノテーションが配置されているコード ブロックの最後で自動的に閉じられるようになります。ファイルやデータベースへの接続など、解放する必要があるリソースを操作する場合に便利です。
import lombok.*; public class Persona { @Getter @Setter private String nombre; private String apellido; }
リソースを使用して try を使用すると、この結果を手動で取得できます。
import lombok.*; @AllArgsConstructor @ToString public class Persona { private String nombre; @ToString.Exclude private String apellido; } // Output: Persona(nombre=Maria)
このアノテーションを使用すると、設計パターン Builder を自動的に生成できます。これは、複雑なオブジェクトを段階的に構築できるようにするオブジェクトであり、オブジェクトのさまざまな属性を設定する必要がありません。多くのパラメーターを指定してコンストラクターを呼び出します。これは、クラスに多くの属性があり、多くのパラメーターを持つコンストラクターを使用したくない場合に便利です。
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
このアノテーションを使用すると、変更された属性を持つ現在のオブジェクトのコピーを返すメソッドを作成できます。つまり、オブジェクトを使用して現在のオブジェクトのコピーを作成できるメソッド withAttributeName(Object object) を生成します。引数として渡す値によって変更される属性。元のオブジェクトを変更せずにオブジェクトの属性を変更したい場合に便利です。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
ここまでで、最も頻繁に使用できるいくつかのアノテーションを見てきました。これらのアノテーションはそれぞれ、追加の構成を受け入れる場合と受け入れない場合があります。同様に、実験的としてマークされている他のアノテーションもあります。いずれにせよ、確認することが重要です。 Lombok が提供するすべての機能と反復的なコード生成に関する利点を最大限に活用するには、公式ドキュメントを参照してください。
以上がJava の Lombok プロジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。