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はコンパイル、テスト、実行フェーズともに依存することを示す):
  •  
            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()メソッドが生成され、エラーがコンパイルされるためです.