JavaRush /وبلاگ جاوا /Random-FA /کتابخانه لومبوک
Сергей
مرحله
Москва

کتابخانه لومبوک

در گروه منتشر شد
کتابخانه لومبوک مقدار کد نوشته شده را کاهش می دهد و خوانایی را بهبود می بخشد. کتابخانه لومبوک - 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، کد منبع ما کد جاوا معتبر نخواهد بود. بنابراین، شما باید یک افزونه برای IDE نصب کنید، در غیر این صورت محیط توسعه متوجه نخواهد شد که با چه چیزی سر و کار دارد. Lombok از تمام IDE های اصلی جاوا پشتیبانی می کند. ادغام یکپارچه است. همه توابع مانند "نمایش استفاده" و "برو به پیاده سازی" مانند قبل به کار خود ادامه می دهند و شما را به فیلد/کلاس مناسب می برند. بنابراین، برای کلاس های ساده می توانید از حاشیه نویسی استفاده کنید @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می شود . زیرا یک فراخوانی چرخه ای به روش های اشیاء تودرتو وجود خواهد داشت. این کد منجر به یک خطا می شود: equalshashCodeStackOverflowError
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- Exclude a field in a method toString @EqualsAndHashCode.Exclude- Exclude a field in a method equalsandhashCode
@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