タイトル: @NonNull
説明:変数処理、
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(); } }