JavaRush /Java Blog /Random-ID /Anotasi. Bagian kedua. Lombok

Anotasi. Bagian kedua. Lombok

Dipublikasikan di grup Random-ID
Anotasi. Bagian pertama, sedikit membosankan Pada bagian ini, saya memutuskan untuk menyentuh perpustakaan Lombok sebagai perwakilan anotasi Sumber yang terkenal. Dengan anotasi Runtime di artikel berikutnya. Alkisah ada seorang programmer java, setiap hari dia menulis kode-kode biasa, contohnya ini:
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 +
                '}';
    }
}
Ini adalah kelas tipikal yang hanya memiliki 2 bidang (tetapi terkadang ada lebih dari 10-15 bidang). Ya, tentu saja, semua ini bisa dihasilkan di IDE, tapi sialnya, ini memakan ruang. Jika ada 15-20 field, semuanya membutuhkan getter, setter, konstruktor... Di antara semua ini, beberapa metode lain yang tidak terlihat oleh mata dapat dengan mudah hilang. Bagaimana saya bisa membantu programmer seperti itu untuk menulis lebih cepat dan lebih sedikit? Lombok. Langsung ke heat, sekelas sama tapi pakai Lombok:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Ya, itu saja. Dingin? Apa yang akan dilakukan anotasi @Data ? Pada tahap kompilasi akan menghasilkan getter/setter untuk semua field, toString dan mendefinisikan ulang equal dan hashCode sesuai standar. Anda dapat menginstal plugin di IDE dan plugin tersebut akan melihat semua metode yang belum dibuat.
Anotasi.  Bagian kedua.  Lombok - 1
Saya harap Anda, pembaca, menganggapnya menarik, karena berikut ini adalah pengantar singkat dan tautan ke detailnya. Lombok juga memberikan kesempatan untuk mengkustomisasi pembuatannya; semua getter, setter, atau kode hash tidak selalu perlu dibuat secara berbeda. Oleh karena itu, ada anotasi terpisah (saya rasa banyak di antaranya tidak memerlukan deskripsi) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor dan @AllArgsConstructor @Log Ini adalah yang paling umum, keseluruhan rangkaian dapat dilihat di sini var dan val patut mendapat perhatian khusus. Dimungkinkan untuk menulis seperti ini:
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);
    }
}
Mengapa hal ini perlu? Misalnya kita mempunyai kelas RandomAccessFileChannel, kenapa kita perlu menuliskannya seperti ini:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Kalau bisa seperti ini:
var channel2 = new RandomAccessFileChannel();
Menurut pendapat saya, hal ini tidak selalu dapat diterima. Misalnya, kami memiliki metode jahat yang mengembalikan peta jahat:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
jika Anda menyebutnya seperti ini:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Kurang lebih jelas apa yang sedang kami kerjakan. Jika panggilannya seperti ini:
var listSetMap = evilMap();
lalu siapa yang tahu apa yang evilMap() kembalikan, dan sampai Anda melihat metodenya sendiri, Anda tidak akan tahu. Mengapa repot-repot menelusuri sumbernya? Secara umum, Anda harus lebih berhati-hati dengan hal ini. Utas eksperimental: Di sini saya ingin mencatat penjelasannya: @UtilityClass Ini menciptakan konstruktor pribadi dan melemparkan pengecualian di sana (sehingga tangan yang kotor karena refleksi tidak masuk ke sini). Dan dengan sangat baik di awal kelas, ia memberitahu kita bahwa ada metode utilitas. @Delegate Mengimplementasikan pola delegasi. Jika Anda memiliki kelas yang mendelegasikan sesuatu ke kelas lain, sambil membuat perubahan hanya pada beberapa metode, anotasi ini akan menyelamatkan Anda dari duplikasi metode + akan melacaknya. Jika suatu metode dihapus atau ditambahkan, dia akan menyadarinya. Utas anotasi eksperimental Situs web resmi GITHUB Agar IDE berfungsi normal dengan lombok, dan tidak menyorot metode sebagai tidak ada, Anda perlu menginstal plugin. Di situs resminya, terdapat bagian pengaturan di mana Anda dapat melihat cara menghubungkan plugin untuk setiap IDE. Seperti yang Anda lihat, Lombok adalah yang populer. >5000 bintang dan >1000 garpu. Spring menggunakan lombok di kelasnya. Jika Anda memiliki pegas dalam proyek Anda, lihat, mungkin dia menghentikan lombok, Anda tidak tahu.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION