كيفية تشغيل الكود بعد البناء في بنّان Lombok
في البناء الخاص بك، تحتاج إلى استدعاء init()
بعد بناء الكائن من الفئة Foo
. ولكن مع Lombok، لا يتم تضمين طريقة لاستدعاء init()
مباشرة بعد بناء الكائن. ومع ذلك، يمكنك تحقيق هذا السلوك من خلال إعادة تعريف طريقة build()
يدوياً في فئتك. لحسن الحظ، يمكن أن تكون هذه العملية مرنة وتتماشى مع التغييرات المستقبلية في فئتك دون الحاجة إلى تغيير البناء الخاص بك كل مرة.
الخطوات التالية توضح كيفية تحقيق هذا:
-
حل مشكلة تكرار تشغيل حاوية Docker14/03/2024
-
تأخير تشغيل الشيفرة في Xamarin.Android21/03/2024
1. تعريف فئة Foo مع البناء باستخدام Lombok.Builder
javaimport lombok.Builder;
@Builder
public class Foo {
public String val1;
public int val2;
public List listValues;
// تعريف طريقة init() الخاصة بك
public void init() {
// قم بإجراء بعض الفحوصات على القيم.
}
// تعريف طريقة build() المعدلة يدوياً
public static class FooBuilder {
public Foo build() {
Foo foo = new FooBuilder()
.val1(val1)
.val2(val2)
.listValues(listValues)
.build(); // بناء الكائن باستخدام Lombok Builder الافتراضي
foo.init(); // استدعاء init() بعد البناء
return foo;
}
}
}
2. استخدام البناء الجديد
javaFoo foo = Foo.builder()
.val1("value1")
.val2(2)
.listValues(Arrays.asList("value1", "value2"))
.build(); // سيتم استدعاء init() تلقائياً بعد بناء الكائن
باستخدام هذا النهج، يمكنك استدعاء init()
بسهولة بعد بناء الكائن باستخدام Lombok.Builder، دون الحاجة إلى تغيير بناء الكائن في كل مرة تقوم فيها بإضافة حقول جديدة إلى فئتك.
المزيد من المعلومات
بالطبع، هناك بعض النقاط التي يجب مراعاتها عند استخدام هذا النهج:
-
التدقيق في القيم: يجب عليك التحقق من القيم الممررة إلى البنّان وضمان صحتها قبل استدعاء
init()
، خاصة إذا كانت هناك متطلبات محددة للبناء. -
التعامل مع القيم الافتراضية: إذا كانت لديك قيم افتراضية لحقول
Foo
، يجب عليك التعامل معها بشكل مناسب داخل طريقةbuild()
المعدلة. على سبيل المثال، يمكنك تحديد قيم افتراضية لحقولval1
وval2
في البناء الافتراضي لـFooBuilder
، ولكن لا تنسى تضمين هذه القيم في حالة عدم تقديمها. -
التحقق من النص بالقيمة الافتراضية في حالة توفر قيم افتراضية للحقول، يمكنك تشغيل
init()
فقط عندما يتم تعيين القيم الافتراضية. إذا كانت القيم تأتي من قبل المستخدم، فقد تحتاج إلى التحقق من القيم أولاً قبل استدعاءinit()
. -
التعامل مع تغييرات في الهيكل: إذا تمت إضافة حقول جديدة إلى
Foo
، فستحتاج إلى تحديث طريقةbuild()
المعدلة لتضمين هذه الحقول في البناء. -
التفكير في إعادة الاستخدام: قد تحتاج إلى إعادة استخدام طريقة
init()
في سياقات أخرى داخل فئةFoo
. في هذه الحالة، قد تفضل استخدام طريقة خاصة بالتحقق مرة واحدة من جميع القيم، ثم استدعاءinit()
بناءً على هذه القيم.
باستخدام هذه النصائح، يمكنك تحقيق السلوك المطلوب بكفاءة ومرونة دون الحاجة إلى تعديل البناء الخاص بك في كل مرة تقوم فيها بتغيير هيكل الفئة Foo
.