導入
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 サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

Javaでは、CallableとRunnableには3つの主な違いがあります。まず、呼び出し可能な方法は結果を返すことができます。これは、呼び出し可能などの値を返す必要があるタスクに適しています。 run()runnableメソッドには戻り値がありませんが、ロギングなど、返品する必要のないタスクに適しています。第二に、Callableは、エラーの送信を容易にするためにチェックされた例外をスローすることができます。 runnableは、內部的に例外を処理する必要があります。第三に、runnableはスレッドまたはexecutorserviceに直接渡すことができますが、callableはexecutorserviceにのみ提出し、將來のオブジェクトをに返すことができます

Javaは、Java19での完了可能なストリーム(ProjectReactorなど)、仮想スレッドの使用など、非同期プログラミングをサポートしています。 1.CompletableFutureチェーンコールを通じてコードの読みやすさとメンテナンスを改善し、タスクオーケストレーションと例外処理をサポートします。 2。ProjectReactorは、バックプレッシャーメカニズムとリッチ演算子を備えた応答性プログラミングを実裝するためのモノとフラックスタイプを提供します。 3.仮想スレッドは、同時性コストを削減し、I/O集約型タスクに適しており、従來のプラットフォームスレッドよりも軽量で拡張が容易です。各方法には適用可能なシナリオがあり、適切なツールをお客様のニーズに応じて選択する必要があり、混合モデルはシンプルさを維持するために避ける必要があります

Javaでは、列挙は固定定數セットを表すのに適しています。ベストプラクティスには以下が含まれます。1。列挙を使用して固定狀態(tài)またはオプションを表して、タイプの安全性と読みやすさを改善します。 2.フィールド、コンストラクター、ヘルパーメソッドなどの定義など、柔軟性を高めるために、酵素にプロパティとメソッドを追加します。 3. enummapとEnumsetを使用して、パフォーマンスとタイプの安全性を向上させ、配列に??基づいてより効率的であるためです。 4.動的値、頻繁な変更、複雑なロジックシナリオなどの列挙の悪用を避けてください。これらは他の方法に置き換える必要があります。列挙の正しい使用は、コードの品質を改善し、エラーを減らすことができますが、適用される境界に注意を払う必要があります。

Javanioは、Java 1.4によって導入された新しいIoapiです。 1)バッファとチャネルを対象としています。2)バッファ、チャネル、セレクターのコアコンポーネント、3)ノンブロッキングモードをサポートし、4)従來のIOよりも効率的に並行接続を処理します。その利點は、次のことに反映されます。1)非ブロッキングIOはスレッドオーバーヘッドを減らし、2)データ送信効率を改善し、3)セレクターがマルチプレックスを実現し、4)メモリマッピングはファイルの読み取りと書き込みを速めます。注:1)バッファのフリップ/クリア操作は混亂しやすく、2)不完全なデータをブロックせずに手動で処理する必要があります。3)セレクター登録は時間內にキャンセルする必要があります。4)NIOはすべてのシナリオに適していません。

Javaのクラスロードメカニズムはクラスローダーを介して実裝されており、そのコアワークフローは、読み込み、リンク、初期化の3つの段階に分けられます。ローディングフェーズ中、クラスローダーはクラスのバイトコードを動的に読み取り、クラスオブジェクトを作成します。リンクには、クラスの正しさの確認、靜的変數へのメモリの割り當て、およびシンボル參照の解析が含まれます。初期化は、靜的コードブロックと靜的変數割り當てを実行します。クラスの読み込みは、親クラスローダーに優(yōu)先順位を付けてクラスを見つけ、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを順番に試して、コアクラスライブラリが安全であり、重複した負荷を回避することを確認します。開発者は、urlclasslなどのクラスローダーをカスタマイズできます

JavaprovidesMultipLesynchronizationStoolsforthreadsafety.1.synchronizedBlocksensurexclusionbyLockingmethodsorspeficCodeSections.2.ReentrantLockOfferSollol、TryLockandFairnessPolicies.3.ConditionVarisallowthReadStowaitfor

Java例外処理の鍵は、チェックされた例外と未確認の例外を區(qū)別し、最後に合理的にログを記録するTry-Catchを使用することです。 1. IOExceptionなどのチェックされた例外は、予想される外部問題に適した処理を強制される必要があります。 2。nullpointerexceptionなどのチェックされていない例外は、通常、プログラムロジックエラーによって引き起こされ、ランタイムエラーです。 3。例外をキャッチする場合、例外の一般的なキャプチャを避けるために、それらは具體的かつ明確でなければなりません。 4.リソース付きのTry-Resourcesを使用して、コードの手動清掃を減らすためにリソースを自動的に閉鎖することをお勧めします。 5。例外処理では、詳細情報をログフレームワークと組み合わせて記録して後で容易にする必要があります

HashMapは、Javaのハッシュテーブルを介してキーと値のペアストレージを実裝し、そのコアはデータの位置をすばやく配置することにあります。 1.最初にキーのHashCode()メソッドを使用して、ハッシュ値を生成し、ビット操作を介して配列インデックスに変換します。 2。異なるオブジェクトは、同じハッシュ値を生成し、競合をもたらす場合があります。この時點で、ノードはリンクされたリストの形式で取り付けられています。 JDK8の後、リンクされたリストが長すぎ(デフォルトの長さ8)、効率を改善するために赤と黒の木に変換されます。 3.カスタムクラスをキーとして使用する場合、equals()およびhashcode()メソッドを書き直す必要があります。 4。ハッシュマップは容量を動的に拡大します。要素の數が容量を超え、負荷係數(デフォルト0.75)を掛けた場合、拡張して再ハッシュします。 5。ハッシュマップはスレッドセーフではなく、マルチスレッドでconcuを使用する必要があります
