あなたはまだJavaコードのセットを記述している/メソッドを取得しますか?あなたはロンボクを使用していない私に教えないでください。

序文

何?あなたのJavaコードもセット/ getメソッドの多くで満たされていますか?

私たちは話さJava言語、オブジェクト指向の特徴は3つのカプセル化、継承、ポリモーフィズムで学ぶために始めています。Javaでは、IDEは、Eclipseのような、IDEAは、セット/メソッドを取得を生成するためのショートカットを提供していますが、やってであるが、包装が、外部のセット/アクセスするためのメソッドを取得するを提供し、メンバ変数を民営化する必要があることを確実にするためにプロジェクトは、JavaBeanはしばしば10個のメンバー変数がある場合、この方法は、20以上に対応して、おそらくコンストラクタを書き込むために、方法に等しく、そして、メンバ変数、二つの方法に対応する変数の多くを持っていますメンテナンスを必要としています。その結果、コードが非常に冗長になり、これらは一度プロパティを変更、多くの技術的な内容なしで、非常に長いようで、対応する方法のミスの外観を変更するために忘れがちです。

私はギャングスターソースプロジェクトを見て、自分のコードがJavaBeanのコメントのマークに置き換え、メソッドを取得/設定していない、私は非常に好奇心を参照、実際に彼らは、ロンボク島と呼ばれる技術を使用していました。プラグインは、このプラグインについての詳細を学ぶために行きます。

ロンボク島の背景

次のように関係者は説明しました:

Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.

大雑把に「ハンドラ」の数を増やすことでロンボクを意味Javaが簡単で、高速で行うことができます。

ロンボク使用

注釈は、ハッシュコード、toStringメソッド、ロンボク方法は、コンパイル時に自動的に生成されたコンストラクタプロパティ、ゲッター/セッターで、等しくすることができます。ソースコードには魔法のgetterメソッドとsetterメソッドはありませんが、コンパイル済みのバイトコードファイル内のgetterメソッドとsetterメソッドがあることが表示されます。このマニュアルでより簡潔にコードの外観を作り、トラブルコードを再構築する必要性排除。

ロンボクジャーパッケージを参照して使用されている、あなたは、公式ウェブサイト(https://projectlombok.org/download)で、ダウンロードのjarパッケージには、Mavenの依存関係を追加するためにも使用することができますすることができます:

<dependency>
  <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <version>1.18.10</version>

    <scope>provided</scope>

</dependency>

 

注意:

あなたはプラグインは、次の手順ロンボクの設定を行う必要があります初めて使用するとき

  • プラグインのインストールロンボクIDEAへ
file -> setting

プラグインを選択し、ロンボクを検索、インストール]をクリックします

  • デフォルトのコンパイルモードを選択して日食はロンボク島のコンパイルの仕方によってサポートされていないため、javacコンパイラのサポートロンボク道のjavacです。
  • 注釈を開きビルダー注釈処理を有効にします

再び注意:

IntelliJ IDEA 2019.2(つまり、私はバージョンを使用)、デフォルトロンボクウィジェットでサポートされていない行く必要

https://plugins.jetbrains.com/plugin/6317-lombok/versions

プラグの対応バージョンをダウンロードし、IDEAで手動導入、[ファイル] - > [設定] - > [プラグインはディスクからのプラグインをインストール見つける...(異なる場所が別のノートバージョンでもよいです)

次に、我々はロンボク島のアノテーションの特定の使用を解析します

@データ

クラス、セッター/ゲッターに@data注釈、等しく、canEqual、ハッシュコード、toStringメソッドが自動的にそのような最終的な属性として、すべての特性は、発電のためのない属性セッターメソッドのクラスを生成します。

たとえば、私たちは、クラスの生徒を書きます

@Data
public class Student {

    private String name;

    private Integer age;

    private Integer id;

    private String major;

}

あなたが方法を取得/セットを呼び出すことができるようにします。

@ゲッター/セッター@

あなたは(のRequiredArgsConstructor @ @Dataコレクション@ ToStringメソッド、@ EqualsAndHashCode、@ゲッター/ @セッター、すべての機能があるため)罰金が十分ではありません@Dataはあまりにも残酷な、あなたは@ゲッター/ @セッターアノテーションを使用することができると思う場合は、財産上のこの注釈は、することができます生成され、自動的に設定/対応する方法属性を取得します。

public class Student {
  @Setter private String name;

    private Integer age;

    private Integer id;

    private String major;

    public static void main(String[] args) {

        Student stu = new Student();

        stu.setName("Mr.ml");

    }
}

 

@NonNull

プロパティまたはコンストラクタで使用される注釈は、ロンボク島は非空で文がNULLポインタを防ぐことができ、パラメータを確認するために使用することができますが生成されます。

public class Student {
  @Setter private String name;

    private Integer age;

    private Integer id;

    private String major;

    

    public Student(@NonNull String name) {

        this.name = name;

    }

}

 

@掃除

ノートは大幅にコードを簡素化し、私たちは自動的にclose()メソッドを呼び出すのに役立ちます。

public class CleanupExample {
  public static void main(String[] args) throws IOException {

		@Cleanup InputStream in = new FileInputStream(args[0]);

		@Cleanup OutputStream out = new FileOutputStream(args[1]);

		byte[] b = new byte[10000];

		while (true) {

			int r = in.read(b);

      		if (r == -1) break;

      		out.write(b, 0, r);

    	}

  	}

}

 

@EqualsAndHashCode

デフォルトでは、すべての非静的(非静的)を使用し、非過渡(非過渡的)とhashCode発生プロパティに等しくなり、あなたはまた、いくつかのプロパティを除外するために注釈を除外することができます。

@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {

    private transient int transientVar = 10;

    private String name;

    private double score;

    private Shape shape = new Square(5, 10);

    private String[] tags;

    private int id;

    public String getName() {

        return this.name;

    }

    @EqualsAndHashCode(callSuper=true)

    public static class Square extends Shape {

        private final int width, height;

        public Square(int width, int height) {

            this.width = width;

            this.height = height;

        }

    }

}

@ToString

使用@ToString注釈クラスは、ロンボク島は、カンマで割っデフォルト、意志の出力クラス名は、すべての属性(属性は順序が続く定義)、によって、toString()メソッドであり、生成されます。

trueにincludeFieldNamesパラメータセットすることで、あなたはのtoString()プロパティの出力をクリアすることができます。これは回旋ビットで、コードを見ては、より明確にいくつかになります。

@ToString(exclude="id")
public class ToStringExample {

    private static final int STATIC_VAR = 10;

    private String name;

    private Shape shape = new Square(5, 10);

    private String[] tags;

    private int id;

    public String getName() {

        return this.getName();

    }

    @ToString(callSuper=true, includeFieldNames=true)

    public static class Square extends Shape {

        private final int width, height;

        public Square(int width, int height) {

            this.width = width;

            this.height = height;

        }

    }

}

@NoArgsConstructor、@RequiredArgsConstructorと@AllArgsConstructor

引数のないコンストラクタ、いくつかのパラメータが設定され、全​​引数のコンストラクタ。ロンボクは、より多くの引数のコンストラクタのオーバーロードを達成していません。

@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)

public class ConstructorExample<T> {

    private int x, y;

    @NonNull private T description;

    @NoArgsConstructor

    public static class NoArgsExample {

        @NonNull private String field;

    }

}
公開された239元の記事 ウォン称賛48 ビュー30000 +

おすすめ

転載: blog.csdn.net/Sqdmn/article/details/105017441