CodeGym /Java Blog /Acak /Anotasi. Bagian 2. Lombok
John Squirrels
Level 41
San Francisco

Anotasi. Bagian 2. Lombok

Dipublikasikan di grup Acak
Anotasi. Bagian 1 — sedikit membosankan Pada bagian ini, saya memutuskan untuk menyentuh perpustakaan Lombok, karena ini adalah perwakilan anotasi kode sumber yang terkenal. Saya akan membahas anotasi runtime di artikel berikutnya. Anotasi.  Bagian 2. Lombok - 1Pada suatu ketika, ada seorang programmer Java. Setiap hari dia menulis kode biasa, misalnya seperti ini:
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 +
                '}';
    }
}
Kelas ini biasa saja — hanya 2 bidang (toh, terkadang ada lebih dari 10-15 bidang). Tentu saja, semua ini bisa dihasilkan di IDE. Tapi sialnya, itu terjadi. Jika ada 15-20 field, masing-masing membutuhkan getter, setter, konstruktor... Di antara semua ini, beberapa metode lain, yang tidak terlihat oleh mata, dapat dengan mudah hilang. Bagaimana kami membantu programmer ini menulis lebih cepat dan lebih sedikit? Lombok. Keluar dari penggorengan dan masuk ke dalam api bersamamu. Ini kelas yang sama, tapi sekarang kita menggunakan Lombok:
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
Itu saja. Keren, ya? Apa yang dilakukan anotasi @Data ? Selama kompilasi, anotasi ini menghasilkan pengambil/penyetel untuk semua bidang, dan menggantikan toString(), sama dengan(), dan kode hash() sesuai dengan aturan standar. Anda dapat menginstal plugin di IDE. Ini akan melihat metode apa pun yang belum dibuat. Anotasi.  Bagian 2. Lombok - 2Pada titik ini, saya harap Anda, pembaca saya, tertarik, karena berikut ini adalah pengantar singkat dengan tautan ke detailnya. Lombok juga memungkinkan Anda menyesuaikan pembuatan kode, misalnya semua getter dan setter tidak selalu diperlukan, atau Anda mungkin memerlukan algoritma berbeda untuk menghasilkan kode hash. Untuk mencapai hal ini, ada anotasi terpisah (saya pikir banyak dari mereka tidak memerlukan deskripsi): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor, dan @AllArgsConstructor, @Log Ini adalah yang paling banyak umum. Keseluruhan rangkaian dapat dilihat di sini . Berikan perhatian khusus pada var dan val. Artinya Anda dapat menulis kode seperti ini:
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);
    }
}
Mengapa hal ini perlu? Misalnya, kita memiliki kelas RandomAccessFileChannel. Mengapa kita ingin menulis kode seperti ini?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Jika kita bisa melakukan 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();
Maka kurang lebih jelas apa yang sedang kami kerjakan. Jika panggilannya seperti ini:
var listSetMap = evilMap();
maka hanya iblis yang tahu apa yang evilMap() akan kembalikan ke sana, dan sampai Anda melihat metodenya sendiri, Anda tidak akan mengetahuinya. Mengapa harus mencari-cari file sumber? Secara umum, Anda perlu berhati-hati dengan hal ini. Cabang eksperimental: Di sini saya ingin menyebutkan anotasi @UtilityClass . Ini menciptakan konstruktor pribadi yang memberikan pengecualian (jadi tangan kecil yang kotor tidak menggunakan refleksi untuk ikut campur di sana). Dan ini sangat indah di awal kelas - ini memberitahu kita bahwa ada metode utilitas. Anotasi @Delegate mengimplementasikan pola delegasi. Misalkan Anda memiliki kelas yang mendelegasikan sesuatu ke kelas lain, dan Anda membuat perubahan hanya pada beberapa metode — anotasi ini akan menyelamatkan Anda dari duplikasi metode dan akan melacaknya. Jika Anda menghapus atau menambahkan metode, anotasi ini akan diperhatikan. Cabang anotasi eksperimental Situs web resmi GitHub Agar IDE berfungsi dengan baik dengan lombok dan tidak menyorot metode sebagai tidak ada, Anda harus menginstal plugin. Situs web resminya memiliki bagian pengaturan di mana Anda dapat melihat cara menghubungkan plugin untuk setiap IDE. Seperti yang Anda lihat, lombok populer: >5.000 bintang dan >1.000 garpu. Spring menggunakan lombok di kelasnya. Jika Anda memiliki Spring di proyek Anda, lihatlah — Spring mungkin telah menarik Lombok tanpa sepengetahuan Anda.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION