السجل هو هيكل يتميز بأنه غير قابل للتغيير، أي أنه بمجرد إنشاء كائن من النوع السجل ، لا يمكن تعديل سماتها، فهي تعادل ما تسميه لغات البرمجة الأخرى فئة البيانات أو DTO (كائن نقل البيانات). ومع ذلك، إذا كانت السمة مطلوبة لتعديلها باستخدام طريقة setter ومع الأخذ في الاعتبار أن كل سمة داخل السجل هي من النوع النهائي، فكيف يمكن تحقيق ذلك؟
لإظهار ما إذا كان ذلك ممكنًا، فلنقم بإنشاء منتج سجل يحتوي على سمتين، الاسم والسعر، والطرق المعنية التي يتم إنشاؤها تلقائيًا عند تحديد سجل في Java:
public record Product(String name, double price) { }الآن، إذا قمت بإنشاء كائن من نوع المنتج وحاولت تعديل سمة الاسم، فيمكنك أن ترى أن ذلك غير ممكن، ولا توجد حتى طريقة
setter للقيام بذلك:
public record Product(String name, double price) { }ولكن، إذا علمنا أن
السجل يمكن أن يحتوي على طرق إضافية، فيمكننا إنشاء طريقة setName(اسم السلسلة) التي تعدل سمة الاسم وتعيين القيمة الجديدة، لأن الإجابة هي لا، لا يعمل كما هو الحال في الفصل العادي، على سبيل المثال:
public record Product(String name, double price) { }إذًا كيف يمكنك تعديل سمة
سجل في Java؟ الجواب هو أنه يمكن ذلك إذا قامت طريقة set بإرجاع مثيل جديد لـ record مع كل سمة من سماتها ومن الواضح مع السمة (السمات) المعدلة. يمكن أن تكون هذه العملية مملة بعض الشيء اعتمادًا على عدد السمات التي يمتلكها السجل..
public record Product(String name, double price) { }بهذه الطريقة، عند استدعاء أي من طرق
setter، سيتم الحصول على مثيل جديد لنوع المنتج مع السمة المعدلة، على سبيل المثال:
public record Product(String name, double price) { }لكل كائن p وq وr، يمكن استدعاء أساليب get وequal و hashCode وtoString بشكل طبيعي، مع الأخذ في الاعتبار أن أيا من الكائنات لا يساوي الآخر، لأن كل كائن له قيمة مختلفة في سماته.
public record Product(String name, double price) { }في هذه المرحلة، من المهم النظر فيما إذا كان هذا النهج مناسبًا للمشكلة التي يتم حلها، مع الأخذ في الاعتبار أن
السجل مصمم ليكون هيكلًا يسمح بتخزين المعلومات ونقلها بطريقة بسيطة داخل التطبيق وتكون غير قابلة للتغيير، أو إذا كانت هناك حاجة إلى بنية ذات مرونة أكبر، فيجب استخدام class. لمزيد من المعلومات حول متى يتم استخدام سجل أو فئة، يمكنك الرجوع إلى المنشور التالي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3