CodeGym /Java Blog /ランダム /注釈。パート 2. ロンボク島
John Squirrels
レベル 41
San Francisco

注釈。パート 2. ロンボク島

ランダム グループに公開済み
注釈。パート 1 — 少し退屈 このパートでは、ソース コードのアノテーションの代表としてよく知られている Lombok ライブラリについて触れることにしました。次の記事では実行時のアノテーションについて説明します。 注釈。 パート 2. ロンボク島 - 1昔々、Java プログラマーがいました。彼女は毎日、たとえば次のような普通のコードを書きました。

package lombok;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
このクラスは通常のもので、フィールドは 2 つだけです (結局のところ、フィールドが 10 ~ 15 個を超える場合もあります)。もちろん、これらはすべて IDE で生成できます。しかし、くそー、それが代わりになります。15 ~ 20 個のフィールドがある場合、それぞれにゲッター、セッター、コンストラクターが必要になります。これらすべての中で、目に見えない他のいくつかのメソッドは簡単に失われる可能性があります。このプログラマーの書き込みをより速く、より少なくするにはどうすればよいでしょうか? ロンボク島。フライパンから出て、あなたと一緒に火の中へ。以下は同じクラスですが、ここでは Lombok を使用しています。

package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
それだけです。クールですね?@Dataアノテーションは何をするのでしょうか? コンパイル中に、このアノテーションはすべてのフィールドのゲッター/セッターを生成し、標準ルールに従って toString()、equals()、および hashCode() をオーバーライドします。IDE にプラグインをインストールできます。まだ作成されていないメソッドが表示されます。 注釈。 パート 2. ロンボク島 - 2この時点で、読者の皆さんが興味を持っていただければ幸いです。以下に詳細へのリンクを含む簡単な紹介を記載します。Lombok では、コード生成をカスタマイズすることもできます。たとえば、すべてのゲッターとセッターが常に必要なわけではない、またはハッシュ コードを生成するために別のアルゴリズムが必要になる場合もあります。これを実現するために、個別のアノテーションがあります (多くは説明が不要だと思います): @Getter/@Setter、@ToString、@EqualsAndHashCode、@NoArgsConstructor、@RequiredArgsConstructor、および @AllArgsConstructor、@Log これらが最も重要です。一般。セット全体はここで 見ることができます。var と val には特に注意してください。つまり、次のようなコードを書くことができます。

package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
なぜこれが必要なのでしょうか? たとえば、RandomAccessFileChannel クラスがあります。なぜこのようなコードを書く必要があるのでしょうか?

RandomAccessFileChannel channel = new RandomAccessFileChannel();
これができたら?

var channel2 = new RandomAccessFileChannel();
私の意見では、これは必ずしも受け入れられるものではありません。たとえば、邪悪なマップを返す邪悪なメソッドがあります。

public static Map<List<Set<Integer>>, Set<List<String>>> evilMap() {
    return new HashMap<>();
}
次のように呼び出した場合:

Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
そうすれば、私たちが何に取り組んでいるのかが多かれ少なかれ明らかになります。呼び出しが次のような場合:

var listSetMap = evilMap();
その場合、 evilMap() がそこで何を返すかは悪魔だけが知っており、メソッド自体を見るまではわかりません。なぜソースファイルを調べ回る必要があるのでしょうか? 一般に、これには注意する必要があります。 実験ブランチ:ここで@UtilityClassアノテーション について言及したいと思います。これは、例外をスローするプライベート コンストラクターを作成します (したがって、汚い小さな手がリフレクションを使用してそこに干渉することはありません)。クラスの冒頭では、ユーティリティ メソッドがあることが示されており、非常に美しいです。@Delegateアノテーション委任パターンを実装します。別のクラスに何かを委任するクラスがあり、一部のメソッドのみに変更を加えたとします。このアノテーションにより、メソッドの重複が防止され、メソッドが追跡されます。メソッドを削除または追加すると、このアノテーションがそれを認識します。 実験的なアノテーション ブランチ GitHub 公式 Web サイト IDE が lombok で適切に動作し、メソッドが存在しないものとして強調表示されないようにするために、プラグインをインストールする必要があります。公式 Web サイトにはセットアップ セクションがあり、各 IDE のプラグインを接続する方法が確認できます。ご覧のとおり、lombok は人気があり、スター数は 5,000 個を超え、フォーク数は 1,000 個を超えています。Spring はクラスで lombok を使用します。プロジェクトに Spring が含まれている場合は、見てください。知らないうちに Lombok が取り込まれている可能性があります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION