إذا كنت تعرف بالفعل السجلات في Java، فقد تجد أن استخدامها مشابه جدًا لاستخدام الفئات، ولكن هناك اختلافات مهمة يجب أخذها بعين الاعتبار. سنرى في هذه المقالة الاختلافات بين السجلات والفئات في Java. إذا كنت لا تزال لا تعرف السجلات أوصي بقراءة مشاركتي السجلات في Java: ما هي وكيفية استخدامها.
الكائن غير القابل للتغيير هو الكائن الذي لا يمكن تعديل سماته بمجرد إنشاء الكائن. في حالة السجلات، فهي غير قابلة للتغيير، أي أنه بمجرد إنشاء كائن من النوع سجل، لا يمكن تعديل سماته. من ناحية أخرى، قد تكون أو لا تكون الفئة غير قابلة للتغيير، اعتمادًا على كيفية تنفيذها. يضمن هذا الجزء سلامة البيانات ويمنع تعديلها عن طريق الخطأ.
تتم كتابة الفئات بشكل شائع لتخزين البيانات، مثل تلك الموجودة في استعلام قاعدة البيانات، أو البيانات من النموذج. في كثير من الحالات، تكون هذه البيانات غير قابلة للتغيير، حيث يجب التأكد من صحة البيانات دون استخدام المزامنة. ولتحقيق ذلك يتم كتابة فصل بالعناصر التالية:
على سبيل المثال، إذا كان لديك فئة شخص تحتوي على سمتين هما الاسم واسم العائلة، فيمكنك كتابتها على النحو التالي:
public class Person { private final String name; private final String lastName; public Person(String name, String lastName) { this.name = name; this.lastName = lastName; } public String getName() { return name; } public String getLastName() { return lastName; } @Override public String toString() { return "Person{" "name='" name '\'' ", lastName='" lastName '\'' '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person person)) return false; return Objects.equals(getName(), person.getName()) && Objects.equals(getLastName(), person.getLastName()); } @Override public int hashCode() { return Objects.hash(getName(), getLastName()); } }
يعد هذا حلاً للمهمة، ولكنه يحتوي على الكثير من التعليمات البرمجية لما هو مطلوب بالفعل. إذا كان الفصل يحتوي على المزيد من السمات، فسيكون هناك رمز أطول للكتابة، حتى لو تم ذلك بمساعدة IDE أو مكون إضافي مثل GitHub Copilot. الحل الأفضل هو الإعلان عن فئتنا كفئة بيانات، أي فئة تخزن البيانات فقط، وليس من الضروري أن يكون لها سلوك محدد، وهنا يأتي دور السجلات.
بهذه الطريقة يمكن إعادة كتابة فئة الشخص كسجل على النحو التالي:
public record Person(String name, String lastName) { }يؤدي هذا تلقائيًا إلى إنشاء أساليب يساوي ورمز التجزئة وtoString، بالإضافة إلى أساليب getter لكل من السمات.
ما هي الاختلافات بين السجل والفئة؟
إضافي: سجل باستخدام سمات قابلة للتغيير
package org.jordi.example; public record Product(String name, double price) { }الحزمة org.jordi.example; import java.util.ArrayList; import java.util.List; عربة السجل العامة (قائمة المنتجات> المنتج) { العربة العامة () { this(new ArrayList()); } كثافة العمليات العامة getQuantity() { إرجاع this.products.size(); } getTotal مزدوج عام () { إرجاع this.products.stream().mapToDouble(Product::price).sum(); } }
public record Person(String name, String lastName) { }المشكلة في هذه الحالة هي أن كل من
السجل غير قابل للتغيير في حد ذاته، ولكن في حالة عربة السجل من خلال وجود سمة من النوع ArrayList وبما أن ArrayList بطبيعتها قابلة للتغيير ، يمكنك تعديل محتوى القائمة بمجرد إنشاء مثيل لعربة السجل.
public record Person(String name, String lastName) { }يتم تجميع الكود أعلاه دون مشاكل، حيث يتم تعديل محتوى القائمة فقط، ولكن لا يتم تعديل سمة المنتجات نفسها. هذا مجرد مثال لحالة معينة، وهو على الأرجح ليس ضروريًا، ولكن من الجيد معرفة أنه يمكن القيام بذلك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3