"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Setters وتسجيل في Java

Setters وتسجيل في Java

تم النشر بتاريخ 2024-11-08
تصفح:711

Setters en un Record en Java

السجل هو هيكل يتميز بأنه غير قابل للتغيير، أي أنه بمجرد إنشاء كائن من النوع السجل ، لا يمكن تعديل سماتها، فهي تعادل ما تسميه لغات البرمجة الأخرى فئة البيانات أو DTO (كائن نقل البيانات). ومع ذلك، إذا كانت السمة مطلوبة لتعديلها باستخدام طريقة setter ومع الأخذ في الاعتبار أن كل سمة داخل السجل هي من النوع النهائي، فكيف يمكن تحقيق ذلك؟

لإظهار ما إذا كان ذلك ممكنًا، فلنقم بإنشاء منتج سجل يحتوي على سمتين، الاسم والسعر، والطرق المعنية التي يتم إنشاؤها تلقائيًا عند تحديد سجل في Java:


منتج السجل العام (اسم السلسلة، السعر المزدوج) { }
public record Product(String name, double price) { }
الآن، إذا قمت بإنشاء كائن من نوع المنتج وحاولت تعديل سمة الاسم، فيمكنك أن ترى أن ذلك غير ممكن، ولا توجد حتى طريقة

setter للقيام بذلك:

المنتج ع = منتج جديد("الخبز"، 1.0); p.setName("ماء"); // خطأ: لا يمكن حل الأسلوب "setName" في "المنتج"
public record Product(String name, double price) { }
ولكن، إذا علمنا أن

السجل يمكن أن يحتوي على طرق إضافية، فيمكننا إنشاء طريقة setName(اسم السلسلة) التي تعدل سمة الاسم وتعيين القيمة الجديدة، لأن الإجابة هي لا، لا يعمل كما هو الحال في الفصل العادي، على سبيل المثال:

منتج السجل العام (اسم السلسلة، السعر المزدوج) { // خطأ: لا يمكن تعيين قيمة للمتغير النهائي "الاسم" اسم مجموعة الفراغ العام (اسم السلسلة) { this.name = name; } }
public record Product(String name, double price) { }
إذًا كيف يمكنك تعديل سمة

سجل في Java؟ الجواب هو أنه يمكن ذلك إذا قامت طريقة set بإرجاع مثيل جديد لـ record مع كل سمة من سماتها ومن الواضح مع السمة (السمات) المعدلة. يمكن أن تكون هذه العملية مملة بعض الشيء اعتمادًا على عدد السمات التي يمتلكها السجل..

منتج السجل العام (اسم السلسلة، السعر المزدوج) { اسم مجموعة المنتجات العامة (اسم السلسلة) { إرجاع منتج جديد (الاسم، هذا.السعر)؛ } سعر مجموعة المنتجات العامة (السعر المزدوج) { إرجاع منتج جديد (هذا الاسم، السعر)؛ } }
public record Product(String name, double price) { }
بهذه الطريقة، عند استدعاء أي من طرق

setter، سيتم الحصول على مثيل جديد لنوع المنتج مع السمة المعدلة، على سبيل المثال:

المنتج ع = منتج جديد("الخبز"، 1.0); المنتج q = p.setName("حليب"); المنتج ص = q.setPrice(2.0);
public record Product(String name, double price) { }
لكل كائن p وq وr، يمكن استدعاء أساليب get وequal و hashCode وtoString بشكل طبيعي، مع الأخذ في الاعتبار أن أيا من الكائنات لا يساوي الآخر، لأن كل كائن له قيمة مختلفة في سماته.


الطبقة العامة الرئيسية { public static void main(String[] args) { المنتج ع = منتج جديد ("الخبز"، 1.0)؛ المنتج q = p.setName("حليب"); المنتج ص = q.setPrice(2.0); System.out.println(ع); // المنتج [الاسم = الخبز، السعر = 1.0] System.out.println(ف); // المنتج [الاسم = الحليب، السعر = 1.0] System.out.println(r); // المنتج [الاسم = الحليب، السعر = 2.0] System.out.println(p.equals(q)); // خطأ شنيع System.out.println(q.equals(r)); // خطأ شنيع System.out.println(r.equals(p)); // خطأ شنيع } }
public record Product(String name, double price) { }
في هذه المرحلة، من المهم النظر فيما إذا كان هذا النهج مناسبًا للمشكلة التي يتم حلها، مع الأخذ في الاعتبار أن

السجل مصمم ليكون هيكلًا يسمح بتخزين المعلومات ونقلها بطريقة بسيطة داخل التطبيق وتكون غير قابلة للتغيير، أو إذا كانت هناك حاجة إلى بنية ذات مرونة أكبر، فيجب استخدام class. لمزيد من المعلومات حول متى يتم استخدام سجل أو فئة، يمكنك الرجوع إلى المنشور التالي.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/asjordi/setters-en-un-record-en-java-4fb6?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3