Lombokは、Javaのコンパイル前にソースコードを変更することにより、Javaに機能を追加するプロジェクトです。
実際、Lombokプロジェクトでは、ほとんどの場合Javaの冗長性を取り除き、ゲッター、セッター、イコール、ハッシュコード、およびtoString(はい、通常IDEによって生成されますが、プログラマーは読み取りと変更が必要です)からの大量のコードの書き込みを停止できます。 Kotlin、Scala、またはC#とほぼ同じくらい簡潔です。
Lombokは非常にシンプルで、プロジェクトに簡単に追加できます。 私のように、KISSの原則が好きなら、ロンボクをご覧になることをお勧めします。
また、最新のJava SE8チートシートなど、シリーズの他の記事も参照することをお勧めします。
プロジェクトへの追加は非常に簡単で、通常の依存関係を追加するだけです。
詳細
メイヴン :
可能です(ただし、Lombokのコンパイル後にコードを分析する必要がある場合は、静的コンパイラーの操作用のプラグインを追加する必要はありません)、 こちらを参照してください
グラドル
Idea 、 Eclipseなどのプラグインもあります。 GradleまたはMavenをビルドすると、これらのプラグインなしでビルドされますが、Idea / Eclipseはコードを分析するときにおそらくエラーを表示します。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> </dependency>
可能です(ただし、Lombokのコンパイル後にコードを分析する必要がある場合は、静的コンパイラーの操作用のプラグインを追加する必要はありません)、 こちらを参照してください
グラドル
plugins { id 'net.ltgt.apt' version '0.10' } dependencies { compileOnly 'org.projectlombok:lombok:1.16.18' apt "org.projectlombok:lombok:1.16.18" }
Idea 、 Eclipseなどのプラグインもあります。 GradleまたはMavenをビルドすると、これらのプラグインなしでビルドされますが、Idea / Eclipseはコードを分析するときにおそらくエラーを表示します。
コマンドと注釈:
テーブル
役職 | 説明 | ロンボクの例
| プレーンJavaの例
|
---|---|---|---|
@NonNull
| 可変処理
nullを受け取るべきではない |
|
|
@Getter /
| ゲッターの簡単な作成と
セッター |
|
|
@ToString
| クラスの前の注釈の定義、
標準のtoStringメソッドを実装する |
|
|
@EqualsAndHashCode
| EqualsおよびHashCodeメソッドの簡単な作成 |
|
|
@NoArgsConstructor,
| 空のコンストラクターを作成する
すべての最終フィールドを含むコンストラクター、 または、可能なすべてのフィールドを含むコンストラクター |
|
|
@Data
| すべてのユーティリティメソッドの生成、
すぐに@ ToString、@ EqualsAndHashCodeを置き換え、 Getter 、 Setter 、@RequiredArgsConstructor |
| たくさんのコード
|
@Value
| 不変クラスを作成する
データの類似物、ただし不変クラス用 |
| たくさんのコード
|
@Builder
| bulderパターンの実装、
単数形 -のオブジェクトに使用 シングルコピー(アイテムを追加 コレクション内など) |
| 多くのコード
|
@SneakyThrows
| チェック済み例外のラッパー |
@SneakyThrows( UnsupportedEncodingException.class) public String utf8ToString(byte [] bytes){ 新しい文字列(バイト、「UTF-8」)を返します。 } |
|
@Synchronized
| 同期ブロックの簡単な作成 |
| たくさんのコード
|
@Log
| ログの初期化を追加する
ロガーのタイプを選択することもできます:@CommonsLog、 @ JBossLog、 Log 、@ Log4j、@ Log4j2、@ Slf4j、@ XSlf4j |
|
|
ヴァル | 簡単な最終作成
型推論を持つ変数、 それは同じ値です 議論した |
|
|
@Cleanup
| リソースの簡単な定義
自動的に閉じるように コードの終了後。 (使用する場合はあまり関係ありません リソースで試してください) |
|
|
テーブルの読み取りが不十分と思われる場合は、順番に
タイトル: @NonNull
説明:変数処理、
nullを受け取るべきではない
ロンボク島コード:
タイトル: ゲッター /
セッター
説明:ゲッターの簡単な作成と
セッター
ロンボク島コード:
タイトル: @ToString
説明:クラスの前に注釈を定義し、
標準のtoStringメソッドを実装する
ロンボク島コード:
タイトル: @EqualsAndHashCode
説明: EqualsおよびHashCodeメソッドの簡単な作成
ロンボク島コード:
タイトル:
@NoArgsConstructor、
@RequiredArgsConstructor、
@AllArgsConstructor
説明:空のコンストラクターを作成し、
すべての最終フィールドを含むコンストラクター、
または、可能なすべてのフィールドを含むコンストラクター
ロンボク島コード:
タイトル: データ
説明:すべてのユーティリティメソッドの生成、
すぐに@ ToString、@ EqualsAndHashCodeを置き換え、
Getter 、 Setter 、@RequiredArgsConstructor
ロンボク島コード:
タイトル: 値
説明:不変クラスの作成、
データの類似物、ただし不変クラス用
ロンボク島コード:
通常のJavaコード:
タイトル: ビルダー
説明: bulderパターンの実装、
単数形 -のオブジェクトに使用
シングルコピー(アイテムを追加
コレクション内など)
ロンボク島コード:
通常のJavaコード:
タイトル: @SneakyThrows
説明:チェック済み例外のラッパー
ロンボク島コード:
@SneakyThrows(
UnsupportedEncodingException.class)
public String utf8ToString(byte [] bytes){
新しい文字列(バイト、「UTF-8」)を返します。
}
ロンボク島コード:
タイトル: @Synchronized
説明:同期ブロックの簡単な作成
ロンボク島コード:
通常のJavaコード:
タイトル: ログ
説明:ログ初期化の追加、
ロガーのタイプを選択することもできます:@CommonsLog、
@ JBossLog、 Log 、@ Log4j、@ Log4j2、@ Slf4j、@ XSlf4j
ロンボク島コード:
ヴァルシンプルクリエーションファイナル
型推論を持つ変数、
それは同じ値です
議論した
タイトル: @Cleanup
説明:単純なリソース定義、
自動的に閉じるように
コードの終了後。
(使用する場合はあまり関係ありません
リソースで試してください)
ロンボク島コード:
説明:変数処理、
nullを受け取るべきではない
ロンボク島コード:
public Example(@NonNull P p) { super("Hello"); this.name = p.getName(); }
通常のJavaコード:
public Example(@NonNull P p) { super("Hello"); if (p == null) { throw new NullPointerException("p"); } this.name = p.getName(); }
タイトル: ゲッター /
セッター
説明:ゲッターの簡単な作成と
セッター
ロンボク島コード:
@Getter @Setter private int age = 10;
通常のJavaコード:
private int age = 10; public int getAge() { return age; } public void setAge(int age) { this.age = age; }
タイトル: @ToString
説明:クラスの前に注釈を定義し、
標準のtoStringメソッドを実装する
ロンボク島コード:
@ToString(exclude="f") public class Example
通常のJavaコード:
public class Example { @Override public String toString() { return ...; }
タイトル: @EqualsAndHashCode
説明: EqualsおよびHashCodeメソッドの簡単な作成
ロンボク島コード:
@EqualsAndHashCode( exclude={"id1", "id2"}) public class Example {
通常のJavaコード:
public class Example { ... @Override public boolean equals(Object o) { ... } @Override public int hashCode() { ... }
タイトル:
@NoArgsConstructor、
@RequiredArgsConstructor、
@AllArgsConstructor
説明:空のコンストラクターを作成し、
すべての最終フィールドを含むコンストラクター、
または、可能なすべてのフィールドを含むコンストラクター
ロンボク島コード:
@RequiredArgsConstructor( staticName = "of" ) @AllArgsConstructor( access = AccessLevel.PROTECTED ) public class E<T> {
通常のJavaコード:
public class E<T> { private E(T description) { ... } public static <T>E<T> of( T description ) { return new E<T>(description); }
タイトル: データ
説明:すべてのユーティリティメソッドの生成、
すぐに@ ToString、@ EqualsAndHashCodeを置き換え、
Getter 、 Setter 、@RequiredArgsConstructor
ロンボク島コード:
@Data public class Example { private final String name; private int age; }
public class Example { private final String name; private int age; public Example( String name ) { this.name = name; } public String getName() { return this.name; } void setAge(int age) { this.age = age; } public int getAge() { return this.age; } @Override public String toString() { return ...; } @Override public boolean equals( Object o ) { .... } @Override public int hashCode() { ... }
タイトル: 値
説明:不変クラスの作成、
データの類似物、ただし不変クラス用
ロンボク島コード:
@Value public class Example { private final String name; private int age; }
通常のJavaコード:
public class Example { private final String name; private final int age; public Example( String name, int age ) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } @Override public String toString() { return ...; } @Override public boolean equals( Object o ) { .... } @Override public int hashCode() { ... }
タイトル: ビルダー
説明: bulderパターンの実装、
単数形 -のオブジェクトに使用
シングルコピー(アイテムを追加
コレクション内など)
ロンボク島コード:
@Builder public class Example { private String name; private int age; @Singular private Set<String> occupations; }
通常のJavaコード:
public class Example { private String name; private int age; private Set<String> occupations; Example( String name, int age, Set<String> occupations ) { this.name = name; this.age = age; this.occupations = occupations; } public static ExampleBuilder builder() { return new ExampleBuilder(); } public static class ExampleBuilder { private String name; private int age; private ArrayList<> occupations; ExampleBuilder() { } public ExampleBuilder name( String name ) { this.name = name; return this; } public ExampleBuilder age( int age ) { this.age = age; return this; } public ExampleBuilder occupation( String occupation ) { if (this.occupations == null) { this.occupations = new ArrayList<String>(); } this.occupations.add(occupation); return this; } ... public Example build() { Set<String> occupations = ...; return new Example(name, age, occupations); } @java.lang.Override public String toString() { ... } } }
タイトル: @SneakyThrows
説明:チェック済み例外のラッパー
ロンボク島コード:
@SneakyThrows(
UnsupportedEncodingException.class)
public String utf8ToString(byte [] bytes){
新しい文字列(バイト、「UTF-8」)を返します。
}
ロンボク島コード:
public String utf8ToString(byte[] bytes) { try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { throw Lombok.sneakyThrow(e); } }
タイトル: @Synchronized
説明:同期ブロックの簡単な作成
ロンボク島コード:
private final Object readLock = new Object(); @Synchronized public static void hello() { ...; } @Synchronized public int answerToLife() { ... } @Synchronized("readLock") public void foo() { ... }
通常のJavaコード:
private static final Object $LOCK = new Object[0]; private final Object $lock = new Object[0]; private final Object readLock = new Object(); public static void hello() { synchronized($LOCK) { ... } } public int answerToLife() { synchronized($lock) { ... } } public void foo() { synchronized(readLock) { ... } }
タイトル: ログ
説明:ログ初期化の追加、
ロガーのタイプを選択することもできます:@CommonsLog、
@ JBossLog、 Log 、@ Log4j、@ Log4j2、@ Slf4j、@ XSlf4j
ロンボク島コード:
@Slf4j public class Example { public static void main(String... args) { log.error("error"); }
通常のJavaコード:
public class Example { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class); public static void main(String... args) { log.error("error"); }
ヴァルシンプルクリエーションファイナル
型推論を持つ変数、
それは同じ値です
議論した
val map = new HashMap<Integer, String>(); for (val entry : map.entrySet()) { ... }
final HashMap<Integer, String> map = new HashMap<Integer, String>(); ... for (final Map.Entry<Integer, String> entry : map.entrySet()) { ... }
タイトル: @Cleanup
説明:単純なリソース定義、
自動的に閉じるように
コードの終了後。
(使用する場合はあまり関係ありません
リソースで試してください)
ロンボク島コード:
@Cleanup InputStream in = new FileInputStream(args[0]); @Cleanup OutputStream out = new FileOutputStream(args[1]); ...
通常のJavaコード:
InputStream in = new FileInputStream(args[0]); try { OutputStream out = new FileOutputStream(args[1]); try { ... } finally { if (out != null) { out.close(); } } } finally { if (in != null) { in.close(); } }