لومبوک لائبریری لکھے ہوئے کوڈ کی مقدار کو کم کرتی ہے، پڑھنے کی اہلیت کو بہتر بناتی ہے۔ استعمال کی مثال۔
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
جائے گی ۔ کیونکہ نیسٹڈ آبجیکٹ کے طریقوں پر ایک چکری کال ہوگی۔ اس کوڈ کے نتیجے میں ایک خرابی ہوگی: 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
<h2>نتیجہ</h2>یہ صرف بنیادی لومبوک تشریحات ہیں، لیکن یہ سب سے زیادہ استعمال شدہ ہیں اور سب سے زیادہ اثر رکھتی ہیں۔ آپ کو کوڈ جنریشن کے ساتھ بھی زیادہ پریشان نہیں ہونا چاہئے۔ <h2>لنک</h2>
GO TO FULL VERSION