JavaRush /בלוג Java /Random-HE /ספריית לומבוק
Сергей
רָמָה
Москва

ספריית לומבוק

פורסם בקבוצה
ספריית Lombok מפחיתה את כמות הקוד שנכתב, ומשפרת את הקריאה. ספריית לומבוק - 1דוגמה לשימוש. כיתה רגילה Personעם שלושה תחומים:
public class Person {

    private String name;
    private int age;
    private Cat cat;

    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;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name) &&
                Objects.equals(cat, person.cat);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, cat);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cat=" + cat +
                '}';
    }
}
אותו דבר עם לומבוק
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
הסרנו חבורה של קוד, עם זאת, כל השיטות והמתאמים נשארו. איך זה עובד. Lombok מייצר קוד בזמן ההידור. ספריית lombok עצמה חסרה בזמן ריצה. השימוש בו אינו מגדיל את גודל התוכנית. בעת שימוש ב-Lombok, קוד המקור שלנו לא יהיה קוד Java חוקי. לכן, תצטרכו להתקין תוסף ל-IDE, אחרת סביבת הפיתוח לא תבין במה היא מתעסקת. Lombok תומך בכל ה- IDE העיקריים של Java. האינטגרציה היא חלקה. כל הפונקציות כמו "הצג שימוש" ו"עבור ליישום" ממשיכות לעבוד כמו פעם, ומובילות אותך לשדה/מחלקה המתאימים. אז, עבור שיעורים פשוטים אתה יכול להשתמש בהערה @Data. @Data- יוצר בנאי, גטרים, קובעים, שיטות equals, hashCode, toString. כדי להפוך אובייקטים לבלתי ניתנים לשינוי יש @Value. @Value- יוצר את הבנאי, רק קבלנים, מתודות equals, hashCode, toString. וגם עושה את כל השדות privateו final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@Withהערות ו- . עובדים היטב עם כיתות בלתי ניתנות לשינוי @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
אם אנחנו רוצים לשנות את השדה של אובייקט בלתי ניתן לשינוי, אז אנחנו צריכים לעשות שיבוט של אובייקט זה עם פרמטר אחד שונה. @With- מוסיף שיטות לכל שדה שיוצרות שיבוט של האובייקט עם שדה אחד שונה.
Cat anotherCat = cat.withName("Vasya");
anotherCat- אובייקט חדש שערכי השדה שלו זהים לזה של cat, מלבד השדה name. @Builder- מייצר שיטות שבאמצעותן אנו מאתחלים אובייקט לאורך שרשרת. זה נוח כשאנחנו לא רוצים להשתמש בבנאי עם כל הפרמטרים (אם המחלקה שלנו היא בלתי ניתנת לשינוי, אז יש לה בנאי בודד עם כל הפרמטרים).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
קריאה מחזורית של שיטות אם לאובייקטים יש תקשורת דו-כיוונית, כלומר. הפניות זה לזה, אז השימוש בשיטות toStringיוביל equalsלשגיאה . כי תהיה קריאה מחזורית לשיטות של אובייקטים מקוננים. קוד זה יגרום לשגיאה: hashCodeStackOverflowError
public class Main {

    public static void main(String[] args) {
        Person person = new Person();

        Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();

        person.setName("Ivan");
        person.setAge(26);
        person.setCat(cat);

        System.out.println(person);
        System.out.println(cat);
    }
}
הפתרון לבעיה הוא לשבור את הקריאה המחזורית על ידי הסרת השדה מהשיטה. @ToString.Exclude- אל תכלול שדה בשיטה toString @EqualsAndHashCode.Exclude- אל תכלול שדה בשיטה equalsוhashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
עוד כמה הערות שימושיות @Slf4j- מוסיף לוגר למחלקה @SneakyThrows- הופך חריגים מסומנים לבלתי מסומנים
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
הערה בנפרד אם מסיבה כלשהי אתה צריך רק שיטות מסוימות
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
ספריית לומבוק - 2<h2>מסקנה</h2>אלו רק הערות הלומבוק הבסיסיות, אך הן הנפוצות ביותר בשימוש ויש להן את ההשפעה הגדולה ביותר. גם אתה לא צריך להיסחף יותר מדי עם יצירת קוד. <h2>קישורים</h2>
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION