JavaRush /مدونة جافا /Random-AR /مكتبة لومبوك
Сергей
مستوى
Москва

مكتبة لومبوك

نشرت في المجموعة
تعمل مكتبة لومبوك على تقليل كمية التعليمات البرمجية المكتوبة، مما يحسن إمكانية القراءة. مكتبة لومبوك - 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 جميع بيئات تطوير 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إلى hashCodeخطأ StackOverflowError. لأن سيكون هناك استدعاء دوري لأساليب الكائنات المتداخلة. سيؤدي هذا الرمز إلى خطأ:
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