JavaRush /جاوا بلاگ /Random-UR /لومبوک لائبریری
Сергей
سطح
Москва

لومبوک لائبریری

گروپ میں شائع ہوا۔
لومبوک لائبریری لکھے ہوئے کوڈ کی مقدار کو کم کرتی ہے، پڑھنے کی اہلیت کو بہتر بناتی ہے۔ لومبوک لائبریری - 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 استعمال کرتے وقت، ہمارا سورس کوڈ درست Java کوڈ نہیں ہوگا۔ لہذا، آپ کو IDE کے لیے ایک پلگ ان انسٹال کرنے کی ضرورت ہوگی، بصورت دیگر ترقیاتی ماحول یہ نہیں سمجھ پائے گا کہ یہ کس چیز سے نمٹ رہا ہے۔ Lombok تمام بڑے Java 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جائے گی ۔ کیونکہ نیسٹڈ آبجیکٹ کے طریقوں پر ایک چکری کال ہوگی۔ اس کوڈ کے نتیجے میں ایک خرابی ہوگی: 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
لومبوک لائبریری - 2<h2>نتیجہ</h2>یہ صرف بنیادی لومبوک تشریحات ہیں، لیکن یہ سب سے زیادہ استعمال شدہ ہیں اور سب سے زیادہ اثر رکھتی ہیں۔ آپ کو کوڈ جنریشن کے ساتھ بھی زیادہ پریشان نہیں ہونا چاہئے۔ <h2>لنک</h2>
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION