JavaRush /Java-Blog /Random-DE /Anmerkungen. Zweiter Teil. Lombok

Anmerkungen. Zweiter Teil. Lombok

Veröffentlicht in der Gruppe Random-DE
Anmerkungen. Teil eins, etwas langweilig. In diesem Teil habe ich beschlossen, auf die Lombok-Bibliothek als bekannten Vertreter der Quellanmerkungen einzugehen. Mit Runtime-Anmerkungen im nächsten Artikel. Es war einmal ein Java-Programmierer, der schrieb jeden Tag gewöhnlichen Code, zum Beispiel diesen:
package lombok;

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

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

    public Chelovek() {
    }

    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;

        Chelovek chelovek = (Chelovek) o;

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

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

    @Override
    public String toString() {
        return "Chelovek{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Dies ist eine typische Klasse mit nur 2 Feldern (manchmal sind es jedoch mehr als 10-15 Felder). Ja, natürlich kann das alles in der IDE generiert werden, aber verdammt, es nimmt Platz weg. Wenn es 15–20 Felder gibt, benötigen alle Getter, Setter, Konstruktoren ... Unter all dem können ein paar andere Methoden, die für das Auge unsichtbar sind, leicht verloren gehen. Wie kann ich einem solchen Programmierer helfen, schneller und weniger zu schreiben? Lombok. Direkt in die Hitze, die gleiche Klasse, aber mit Lombok:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Ja, das ist alles. Cool? Was bewirkt die @Data- Annotation ? In der Kompilierungsphase werden Getter/Setter für alle Felder toString generiert und Equals und HashCode gemäß den Standards neu definiert. Sie können ein Plugin in der IDE installieren und es werden alle Methoden angezeigt, die noch nicht erstellt wurden.
Anmerkungen.  Zweiter Teil.  Lombok - 1
Ich hoffe, Sie als Leser fanden es interessant, denn es folgt eine kurze Einführung und Links zu Details. Lombok bietet auch die Möglichkeit, die Generierung anzupassen; alle Getter, Setter oder Hashcodes müssen nicht immer unterschiedlich generiert werden. Daher gibt es separate Anmerkungen (ich denke, viele davon benötigen keine Beschreibung) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor und @AllArgsConstructor @Log Dies sind die typischsten, der gesamte Satz kann angezeigt werden hier verdienen var und val besondere Aufmerksamkeit. Man kann so schreiben:
package lombok;

import lombok.experimental.var;

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

    public static void main(String[] args) {
        var chelovek = new Chelovek();
        chelovek.setAge(22);
        System.out.println(chelovek);
    }
}
Warum ist das notwendig? Wir haben zum Beispiel die Klasse RandomAccessFileChannel. Nun, warum müssen wir sie so schreiben:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Wenn möglich so:
var channel2 = new RandomAccessFileChannel();
Meiner Meinung nach ist dies nicht immer akzeptabel. Zum Beispiel haben wir eine böse Methode, die eine böse Karte zurückgibt:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
wenn man es so nennt:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Es ist mehr oder weniger klar, womit wir arbeiten. Wenn der Anruf so abläuft:
var listSetMap = evilMap();
Wer zum Teufel weiß dann, was evilMap() zurückgibt, und bis Sie sich die Methode selbst ansehen, werden Sie es nicht wissen. Warum sich die Mühe machen, die Quellen durchzugehen? Im Allgemeinen müssen Sie dabei vorsichtiger sein. Experimenteller Thread: Hier möchte ich die Anmerkungen notieren: @UtilityClass Es erstellt einen privaten Konstruktor und löst dort eine Ausnahme aus (damit hier keine schmutzigen Hände von der Reflexion reinkommen). Und sehr schön wird uns zu Beginn des Kurses erklärt, dass es Hilfsmethoden gibt. @Delegate Implementiert das Delegationsmuster. Wenn Sie eine Klasse haben, die etwas an eine andere Klasse delegiert und dabei nur Änderungen an einigen Methoden vornimmt, erspart Ihnen diese Annotation das Duplizieren von Methoden und behält den Überblick darüber. Wenn eine Methode entfernt oder hinzugefügt wird, wird sie es bemerken. Thread zu experimentellen Anmerkungen GITHUB Offizielle Website Damit die IDE normal mit Lombok funktioniert und Methoden nicht als nicht vorhanden hervorgehoben werden, müssen Sie das Plugin installieren. Auf der offiziellen Website gibt es einen Setup-Bereich , in dem Sie sehen können, wie Sie das Plugin für jede IDE verbinden. Wie Sie sehen, ist Lombok beliebt. >5000 Sterne und >1000 Gabeln. Spring verwendet Lombok in ihrem Unterricht. Wenn Sie eine Feder in Ihrem Projekt haben, suchen Sie danach, vielleicht hat sie den Lombok hochgezogen, Sie wissen es einfach nicht.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION