Javaエンコーディング支援ツール:Lombok-膨大なコードの重複を回避し、効率を向上
4763 ワード
プロジェクト開発の過程では、実体クラスのGetter/Setterメソッド、ToStringメソッドなど、調整が少ないが、少なくてはならない部分に関連することが多い.この場合,Lombokを用いてこのような重複動作を回避し,非コアコードの肥大化を低減し,符号化効率を向上させることができる.
IntelliJ IDEAでLombokを導入する方法 Lombokプラグインをインストールします(そうでなければsetter/getterメソッドを呼び出すとIDEがエラーを報告するように要求します):File->Settings->Plugins Lombok Pluginを検索してインストールを完了します. pom.xmlにlombok依存が導入され(providedはコンパイル、テストフェーズのみjarに依存し、実行フェーズは依存しない(実行コンテナにjarが含まれている場合はprovidedとしてjar競合を回避)、デフォルトcompileはコンパイル、テスト、実行フェーズともに依存することを示す):
Lombok注記の用途(参考:https://blog.csdn.net/vbirdbest/article/details/79495398)
@Getter/@Setter
フィールドにGetterメソッドとSetterメソッドを生成するには、フィールドまたはクラスに注釈を付けることができます(注釈はクラス内のすべてのフィールドに対してGetterメソッドとSetterメソッドを生成します).デフォルトはpublicタイプで、必要に応じてメソッドのアクセスレベルを変更できます. @Getter(AccessLevel.PROTECTED)
Lombokの注記には、通常、無パラメトリック関数注記@NoArgsConstructor(無パラメトリック関数を生成するために使用)が含まれているため、無パラメトリック関数も追加生成されます.
@NonNull
フィールドのsetterメソッドを呼び出すと、送信されたパラメータがnullの場合、空の異常Null PointerExceptionが放出され、setterメソッドを生成するときにパラメータが空かどうかをチェックします
@NoArgsConstructor
無パラメトリック構造メソッドを生成します.クラスにfinalフィールドが初期化されていない場合、コンパイラはエラーを報告し、@NoArgsConstructor(force=true)を使用できます.その後、初期化されていないfinalフィールドのデフォルト値0/false/nullが設定され、コンパイラはエラーを報告しません.@NonNullフィールドなどの制約のあるフィールドでは、チェックや割り当ては生成されません.したがって、これらのフィールドを正しく初期化する前に、これらの制約は無効であることに注意してください.
@RequiredArgsConstructor
構築方法を生成します(パラメータを持たない場合もあります)、パラメータを持たない場合、このパラメータはfinalで修飾された初期化されていないフィールド、または@NonNullで注釈された初期化されていないフィールドのみです.
@RequiredArgsConstructor(staticName="of")は、of()の静的メソッドを生成し、構築メソッドをプライベートに設定します.
@AllArgsConstructor
全パラメータを生成する構造方法
@ToString
toString()メソッドを生成します.デフォルトでは、クラス名と各フィールドがカンマで区切られた順序で印刷されます.このように、どのフィールドが含まれていないかを設定し、1つまたは複数の@ToString(exclude="id")/@ToString(exclude={"id","name"})を指定できます.親が継承されている場合は、@ToString(callSuper=true)などの親を呼び出すようにcallSuperを設定できます.
@EqualsAndHashCode
hashCode()メソッドとequals()メソッドを生成します.デフォルトでは、すべての非静的、非transientフィールドが使用されます.ただし、オプションのexcludeパラメータでは、より多くのフィールドを除外できます.あるいは、ofパラメータに名前を付けることで、どのフィールドを使用するかを正確に指定します.
//exclude除外フィールド@EqualsAndHashCode(exclude={"password","salt"})
//of含むフィールド@EqualsAndHashCode(of={"id","phone","password")を指定します.
@Data
@Dataには@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructorの機能が含まれています
@Value
@Valueはフィールドを可変タイプに変更します:final修飾を使用します.@ToString、@EqualsAndHashCode、@AllArgsConstructor、@Getterも含まれます(GetterにはSetterがありません)
@Log
ログを記録するためのlogオブジェクトを生成します.topicプロパティを使用してgetLogger(String name)メソッドのパラメータを設定できます.たとえば@Log 4 j(topic=「com.xxx.service.xxx」)です.デフォルトはクラスのフルリミット名、すなわちクラス名.classです.logは以下のものをサポートします.
@Log java.util.logging.Logger@Log4j org.apache.log4j.Logger@Log4j2 org.apache.logging.log4j.Logger@Slf4j org.slf4j.Logger@XSlf4j org.slf4j.ext.XLogger@CommonsLog org.apache.commons.logging.Log@JBossLog org.jboss.logging.Logger
@SneakyThrows
try catch修飾メソッドを使用して例外をキャプチャします.デフォルトではThrowable例外をキャプチャします.また、キャプチャする例外を設定することもできます:@SneakyThrows(InterruptedException.class)
@Synchronized
メソッドに同期ロックを付ける
@Cleanup
主にIOストリーム関連クラスを修飾するために使用され、finallyコードブロックでリソースをclose()する.
@Getter(lazy = true)
寸法フィールドは、オブジェクトの作成時に初期化されず、最初のアクセス時に初期化され、後で再アクセスしても初期化されません.
@Wither
finalフィールドに値を割り当てる方法
@Builder
あなたのクラスに複雑なコンストラクタAPIを生成します.
@Delegate
リストタイプのフィールドには、一般的なメソッドがたくさん生成されますが、これらのメソッドはリスト内のメソッドです.注意:1つのクラスでは@Delegate注記は1つしか使用できません.複数のsize()メソッドが生成され、エラーがコンパイルされるためです.
IntelliJ IDEAでLombokを導入する方法
org.projectlombok
lombok
1.16.20
provided
Lombok注記の用途(参考:https://blog.csdn.net/vbirdbest/article/details/79495398)
@Getter/@Setter
フィールドにGetterメソッドとSetterメソッドを生成するには、フィールドまたはクラスに注釈を付けることができます(注釈はクラス内のすべてのフィールドに対してGetterメソッドとSetterメソッドを生成します).デフォルトはpublicタイプで、必要に応じてメソッドのアクセスレベルを変更できます. @Getter(AccessLevel.PROTECTED)
Lombokの注記には、通常、無パラメトリック関数注記@NoArgsConstructor(無パラメトリック関数を生成するために使用)が含まれているため、無パラメトリック関数も追加生成されます.
@NonNull
フィールドのsetterメソッドを呼び出すと、送信されたパラメータがnullの場合、空の異常Null PointerExceptionが放出され、setterメソッドを生成するときにパラメータが空かどうかをチェックします
@NoArgsConstructor
無パラメトリック構造メソッドを生成します.クラスにfinalフィールドが初期化されていない場合、コンパイラはエラーを報告し、@NoArgsConstructor(force=true)を使用できます.その後、初期化されていないfinalフィールドのデフォルト値0/false/nullが設定され、コンパイラはエラーを報告しません.@NonNullフィールドなどの制約のあるフィールドでは、チェックや割り当ては生成されません.したがって、これらのフィールドを正しく初期化する前に、これらの制約は無効であることに注意してください.
@RequiredArgsConstructor
構築方法を生成します(パラメータを持たない場合もあります)、パラメータを持たない場合、このパラメータはfinalで修飾された初期化されていないフィールド、または@NonNullで注釈された初期化されていないフィールドのみです.
@RequiredArgsConstructor(staticName="of")は、of()の静的メソッドを生成し、構築メソッドをプライベートに設定します.
@AllArgsConstructor
全パラメータを生成する構造方法
@ToString
toString()メソッドを生成します.デフォルトでは、クラス名と各フィールドがカンマで区切られた順序で印刷されます.このように、どのフィールドが含まれていないかを設定し、1つまたは複数の@ToString(exclude="id")/@ToString(exclude={"id","name"})を指定できます.親が継承されている場合は、@ToString(callSuper=true)などの親を呼び出すようにcallSuperを設定できます.
@EqualsAndHashCode
hashCode()メソッドとequals()メソッドを生成します.デフォルトでは、すべての非静的、非transientフィールドが使用されます.ただし、オプションのexcludeパラメータでは、より多くのフィールドを除外できます.あるいは、ofパラメータに名前を付けることで、どのフィールドを使用するかを正確に指定します.
//exclude除外フィールド@EqualsAndHashCode(exclude={"password","salt"})
//of含むフィールド@EqualsAndHashCode(of={"id","phone","password")を指定します.
@Data
@Dataには@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructorの機能が含まれています
@Value
@Valueはフィールドを可変タイプに変更します:final修飾を使用します.@ToString、@EqualsAndHashCode、@AllArgsConstructor、@Getterも含まれます(GetterにはSetterがありません)
@Log
ログを記録するためのlogオブジェクトを生成します.topicプロパティを使用してgetLogger(String name)メソッドのパラメータを設定できます.たとえば@Log 4 j(topic=「com.xxx.service.xxx」)です.デフォルトはクラスのフルリミット名、すなわちクラス名.classです.logは以下のものをサポートします.
@Log java.util.logging.Logger@Log4j org.apache.log4j.Logger@Log4j2 org.apache.logging.log4j.Logger@Slf4j org.slf4j.Logger@XSlf4j org.slf4j.ext.XLogger@CommonsLog org.apache.commons.logging.Log@JBossLog org.jboss.logging.Logger
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@SneakyThrows
try catch修飾メソッドを使用して例外をキャプチャします.デフォルトではThrowable例外をキャプチャします.また、キャプチャする例外を設定することもできます:@SneakyThrows(InterruptedException.class)
@Synchronized
メソッドに同期ロックを付ける
@Cleanup
主にIOストリーム関連クラスを修飾するために使用され、finallyコードブロックでリソースをclose()する.
@Getter(lazy = true)
寸法フィールドは、オブジェクトの作成時に初期化されず、最初のアクセス時に初期化され、後で再アクセスしても初期化されません.
@Wither
finalフィールドに値を割り当てる方法
@Builder
あなたのクラスに複雑なコンストラクタAPIを生成します.
@Delegate
リストタイプのフィールドには、一般的なメソッドがたくさん生成されますが、これらのメソッドはリスト内のメソッドです.注意:1つのクラスでは@Delegate注記は1つしか使用できません.複数のsize()メソッドが生成され、エラーがコンパイルされるためです.