JavaRush /جاوا بلاگ /Random-SD /Lombok لائبريري
Сергей
سطح
Москва

Lombok لائبريري

گروپ ۾ شايع ٿيل
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 استعمال ڪرڻ وقت، اسان جو سورس ڪوڊ صحيح نه هوندو جاوا ڪوڊ. تنهن ڪري، توهان کي IDE لاءِ هڪ پلگ ان انسٽال ڪرڻ جي ضرورت پوندي، ٻي صورت ۾ ترقي وارو ماحول نه سمجهي سگهندو ته اهو ڇا سان معاملو ڪري رهيو آهي. Lombok سڀني وڏن جاوا IDEs کي سپورٽ ڪري ٿو. انضمام بيحد آهي. سڀ فنڪشن جھڙوڪ ”شو استعمال“ ۽ ”وڃڻ ​​تي عملدرآمد“ اڳي وانگر ڪم ڪرڻ جاري رکندا، توھان کي مناسب فيلڊ/ڪلاس ڏانھن وٺي ويندا. تنهن ڪري، سادي ڪلاسن لاءِ توهان استعمال ڪري سگهو ٿا تشريح @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ويندي . ڇاڪاڻ ته nested شين جي طريقن کي هڪ cyclic ڪال هوندي. هي ڪوڊ هڪ غلطي جي نتيجي ۾ ٿيندو: 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- ھڪڙي فيلڊ کي ھڪڙي طريقي سان خارج ڪريو 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
Lombok لائبريري - 2<h2>نتيجو</h2>اهي صرف بنيادي لومبوڪ تشريحون آهن، پر اهي سڀ کان وڌيڪ استعمال ٿيل آهن ۽ تمام وڏو اثر رکن ٿيون. توهان کي به ڪوڊ جي نسل سان تمام گهڻو پري نه وڃڻ گهرجي. <h2>لنڪس</h2>
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION