ホームページ Java &#&チュートリアル Java の Lombok プロジェクト

Java の Lombok プロジェクト

Jan 08, 2025 pm 10:24 PM

Proyecto Lombok en Java

導入

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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

疑問がある場合は、いつでもロンボク島の公式ドキュメントを確認できます:

  • Maven とロンボク島
  • IntelliJ IDEA のロンボク島

@データ

クラスを作成するとき、手動または IDE によって提供されるショートカットを使用して、次のアクションを定期的に実行します。

  • 属性をカプセル化し、そのゲッター メソッドとセッター メソッドを生成する
  • 空のコンストラクターと、すべての属性を受け取る別のコンストラクターを生成します
  • equals()、hashCode()、toString() メソッドを実装する

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());
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

@NoArgsConstructor、@AllArgsConstructor、および @RequiredArgsConstructor

これらのアノテーションを使用すると、属性がクラス内で宣言された順序に従って使用されることを考慮して、引数のさまざまな組み合わせを持つコンストラクターを自動的に生成できます。

  • @NoArgsConstructor: 引数なし (空) のコンストラクターを生成します。コンストラクターを生成できない場合は、例外がスローされます。これを回避するには、次のようにアノテーションを使用します。 @NoArgsConstructor(force = true).
  • @AllArgsConstructor: クラスのすべての属性を引数として使用してコンストラクターを生成します。
  • @RequiredArgsConstructor: すべての最終フィールドのコンストラクター、および/または @NonNull アノテーションでマークされたコンストラクターを生成します。
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

@Getter と @setter

これらのアノテーションを使用すると、クラスのすべての属性に対して、または対応するアノテーションでマークされた属性に対してのみゲッター メソッドとセッター メソッドを自動的に生成できます。つまり、クラス レベルまたは属性レベルで使用できます。

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

このアノテーションは 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;
}
ログイン後にコピー
ログイン後にコピー

@EqualsAndHashCode

クラスのすべての属性から、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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

@val

このアノテーションにより、変数を 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());
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

@var

これは @val とまったく同じように機能しますが、変数を Final として宣言せず、単にその型を推測します。 String 型のものを宣言することはできず、それに int 型の値を割り当てることは最終的なものではないため、型推論の概念を考慮する必要があります。繰り返しますが、このアノテーションは、Java の最近のバージョンでは var に置き換えられます。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persona {
    private String nombre;
}
ログイン後にコピー
ログイン後にコピー

@NonNull

このアノテーションは、クラス属性とメソッドのパラメーターで使用できます。基本的に、属性の値を 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? Apr 19, 2025 pm 09:51 PM

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...

See all articles