CodeGym/Blog Java/Ngẫu nhiên/Chú thích. Phần 2. Lombok
John Squirrels
Mức độ
San Francisco

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

Xuất bản trong nhóm
Chú thích. Phần 1 - hơi nhàm chán Trong phần này, tôi quyết định đề cập đến thư viện Lombok, vì đây là đại diện nổi tiếng về chú thích mã nguồn. Tôi sẽ giải quyết các chú thích thời gian chạy trong bài viết tiếp theo. Chú thích.  Phần 2. Lombok - 1Ngày xửa ngày xưa có một lập trình viên Java. Hàng ngày cô ấy viết mã thông thường, chẳng hạn như thế này:
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 +
                '}';
    }
}
Lớp này là bình thường - chỉ có 2 trường (đôi khi có hơn 10-15 trường). Tất nhiên, tất cả điều này có thể được tạo trong IDE. Nhưng chết tiệt, điều đó đã diễn ra. Nếu có 15-20 trường, mỗi trường cần getters, setters, constructor... Trong số này, một vài phương thức khác, không thể nhìn thấy được bằng mắt thường, có thể dễ dàng bị mất. Làm cách nào để giúp lập trình viên này viết nhanh hơn và ít hơn? Lombok. Ra khỏi chảo rán và vào lửa cùng bạn. Đây là cùng một lớp, nhưng bây giờ chúng tôi sử dụng Lombok:
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
Đó là tất cả. Tuyệt nhỉ? Chú thích @Data làm gì ? Trong quá trình biên dịch, chú thích này tạo getters/setters cho tất cả các trường và ghi đè toString(), Equals() và hashCode() theo quy tắc tiêu chuẩn. Bạn có thể cài đặt plugin trong IDE. Nó sẽ thấy bất kỳ phương thức nào chưa được tạo. Chú thích.  Phần 2. Lombok - 2Tại thời điểm này, tôi hy vọng bạn, độc giả của tôi, sẽ quan tâm, bởi vì phần tiếp theo sẽ là phần giới thiệu ngắn gọn kèm theo các liên kết đến chi tiết. Lombok cũng cho phép bạn tùy chỉnh việc tạo mã, ví dụ: không phải lúc nào cũng cần tất cả các getter và setters hoặc bạn có thể cần một thuật toán khác để tạo mã băm. Để thực hiện điều này, có các chú thích riêng biệt (tôi nghĩ nhiều chú thích trong số đó sẽ không cần mô tả): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor và @AllArgsConstructor, @Log Đây là những chú thích nhiều nhất chung. Toàn bộ bộ có thể được nhìn thấy ở đây . Đặc biệt chú ý đến var và val. Điều này có nghĩa là bạn có thể viết mã như thế này:
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);
    }
}
Tại sao điều này là cần thiết? Ví dụ: chúng ta có lớp RandomAccessFileChannel. Tại sao chúng ta lại muốn viết mã như thế này?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Nếu chúng ta có thể làm được điều 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();
Sau đó, ít nhiều rõ ràng những gì chúng tôi đang làm việc. Nếu cuộc gọi như thế này:
var listSetMap = evilMap();
thì chỉ có quỷ mới biết cái gì evilMap() sẽ quay trở lại đó, 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 chạy xung quanh các tập tin nguồn? Nói chung, bạn cần phải cẩn thận với điều này. Nhánh thử nghiệm: Ở đây tôi muốn đề cập đến chú thích @UtilityClass . Nó tạo ra một hàm tạo riêng để đưa ra một ngoại lệ (vì vậy những bàn tay nhỏ bé bẩn thỉu không sử dụng sự phản chiếu để can thiệp vào đó). Và nó rất đẹp khi bắt đầu một lớp học - nó cho chúng ta biết rằng có những phương thức tiện ích. Chú thích @Delegate triển khai mẫu ủy quyền . Giả sử bạn có một lớp ủy quyền một cái gì đó cho một lớp khác và bạn 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 việc sao chép các phương thức và nó sẽ theo dõi chúng. Nếu bạn xóa hoặc thêm một phương thức, chú thích này sẽ thông báo. Nhánh 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 phải cài đặt plugin. Trang web chính thức có 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: >5.000 sao và >1.000 nĩa. Spring sử dụng lombok trong các lớp của nó. Nếu bạn có Spring trong dự án của mình, hãy xem - nó có thể đã kéo lombok vào mà bạn không biết.
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào