JavaRush /Blog Java /Random-VI /Chú thích. Phần hai. Lombok

Chú thích. Phần hai. Lombok

Xuất bản trong nhóm
Chú thích. Phần một, hơi nhàm chán. Trong phần này, tôi quyết định đề cập đến thư viện Lombok với tư cách là một đại diện nổi tiếng về chú thích Nguồn. Với chú thích Runtime ở bài viết tiếp theo. Ngày xửa ngày xưa có một lập trình viên java, hàng ngày anh ta viết code thông thường, ví dụ như thế này:
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 +
                '}';
    }
}
Đây là lớp điển hình chỉ có 2 trường (nhưng đôi khi có tới hơn 10-15 trường). Có, tất nhiên, tất cả những thứ này có thể được tạo trong IDE, nhưng chết tiệt, nó chiếm dung lượng. Nếu có 15-20 trường, tất cả chúng đều cần getters, setters, constructor... Trong số tất cả những điều này, một số phương pháp khác mà mắt thường không nhìn thấy được có thể dễ dàng bị thất lạc. Làm cách nào tôi có thể giúp một lập trình viên như vậy viết nhanh hơn và ít hơn? Lombok. Thẳng vào cái nóng, cùng đẳng cấp nhưng dùng Lombok:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Vâng đó là tất cả. Mát mẻ? Chú thích @Data sẽ làm gì ? Ở giai đoạn biên dịch, nó sẽ tạo getters/setters cho tất cả các trường, toString và xác định lại bằng và hashCode theo tiêu chuẩn. Bạn có thể cài đặt một plugin trong IDE và nó sẽ thấy tất cả các phương thức chưa được tạo.
Chú thích.  Phần hai.  Lombok - 1
Tôi hy vọng bạn, người đọc, thấy nó thú vị vì phần tiếp theo là phần giới thiệu ngắn và các liên kết đến chi tiết. Lombok cũng cung cấp cơ hội để tùy chỉnh việc tạo; tất cả getters, setters hoặc hashcode không phải lúc nào cũng cần được tạo khác nhau. Do đó, có các chú thích riêng (tôi nghĩ nhiều chú thích không cần mô tả) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor và @AllArgsConstructor @Log Đây là những cái điển hình nhất, có thể xem cả bộ ở đây var và val đáng được quan tâm đặc biệt. Có thể viết như thế này:
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);
    }
}
Tại sao điều này là cần thiết? Ví dụ mình có lớp RandomAccessFileChannel, tại sao phải viết như thế này:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Nếu có thể như thế này:
var channel2 = new RandomAccessFileChannel();
Theo tôi, điều này không phải lúc nào cũng được chấp nhận. Ví dụ: chúng ta có một phương thức xấu trả về một bản đồ xấu:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
nếu bạn gọi nó như thế này:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Ít nhiều thì rõ ràng chúng tôi đang làm việc với cái gì. Nếu cuộc gọi như thế này:
var listSetMap = evilMap();
thì ai mà biết được evilMap() trả về cái gì, và cho đến khi bạn nhìn vào chính phương thức đó, bạn sẽ không biết. Tại sao phải bận tâm đi qua các nguồn? Nói chung, bạn cần phải cẩn thận hơn với điều này. Chuỗi thử nghiệm: Ở đây tôi muốn lưu ý các chú thích: @UtilityClass Nó tạo ra một hàm tạo riêng và ném một ngoại lệ vào đó (để những bàn tay bẩn do phản chiếu không lọt vào đây). Và rất hay khi bắt đầu lớp, nó cho chúng ta biết rằng có những phương thức tiện ích. @Delegate Triển khai mẫu ủy quyền. Nếu bạn có một lớp ủy quyền một cái gì đó cho một lớp khác, trong khi chỉ thực hiện các thay đổi đối với một số phương thức, chú thích này sẽ giúp bạn tránh khỏi các phương thức trùng lặp + sẽ theo dõi chúng. Nếu một phương thức được xóa hoặc thêm vào, cô ấy sẽ nhận thấy nó. Chuỗi chú thích thử nghiệm GITHUB Trang web chính thức Để IDE hoạt động bình thường với lombok và không đánh dấu các phương thức là không tồn tại, bạn cần cài đặt plugin. Trên trang web chính thức, có một phần thiết lập nơi bạn có thể xem cách kết nối plugin cho từng IDE. Như bạn có thể thấy, Lombok rất phổ biến. >5000 sao và >1000 fork. Spring sử dụng lombok trong lớp học của mình. Nếu bạn có một chiếc lò xo trong dự án của mình, hãy tìm nó, có thể nó đã kéo lombok lên, chỉ là bạn không biết thôi.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION