البرمجة

كيف يمكن تجنب NotSerializableException في Java؟

عندما يحاول Java Virtual Machine (JVM) تسلسل كائن بواسطة مكون Serializable ويجد أن واحدًا من الحقول في الكائن ليس Serializable، فإنه يقوم برمي NotSerializableException. في الحالة التي وضعتها، نعم، سترمي JVM NotSerializableException لأن الكائن Address ليس Serializable. لتجنب هذا الخطأ، يجب عليك تجعل الكائن Address Serializable أيضًا. وفي هذه الحالة، سيكون الكود على النحو التالي:

java
import java.io.Serializable; class Emp implements Serializable { Address address = new Address(); } class Address implements Serializable { String address; }

بعد تغيير الكلاس Address لينفذ Serializable، لن يُلقى الخطأ NotSerializableException.

المزيد من المعلومات

عندما يتعلق الأمر بـ Serialization في Java، هناك بعض النقاط التي يجب أخذها في الاعتبار:

  1. Serializable Interface: لجعل الكائن قابل للتسلسل، يجب أن تنفذ الكلاس Serializable interface. هذا الإنترفيس لا يحتوي على أي طرق، ويستخدم فقط للتأكيد على أن الكلاس يمكن تسلسله.

  2. NotSerializableException: عندما تحاول تسلسل كائن واجد أن أحد الحقول غير قابل للتسلسل (غير Serializable)، سيتم رمي NotSerializableException.

  3. التسلسل العميق والضحل: عند تسلسل كائن يحتوي على كائنات أخرى، فإنه يمكن أن يكون التسلسل “عميقًا” (deep) أو “ضحلًا” (shallow). في التسلسل العميق، يتم تسلسل الكائن وجميع الكائنات التي يحتوي عليها. في التسلسل الضحل، يتم تسلسل الكائن فقط دون أي كائنات داخلية.

  4. transient keyword: يمكنك استخدام transient keyword لتجاهل تسلسل حقل معين. عند تحديد حقل كـ transient، فإن JVM تجاهل تسلسله وتتجاهله عند إعادة بناء الكائن بعد التسلسل.

  5. Externalizable Interface: بالإضافة إلى Serializable interface، يمكنك استخدام Externalizable interface لتحكم دقيق في عملية التسلسل والإلغاء التسلسل. يجب تنفيذ methods readExternal و writeExternal عند استخدام Externalizable.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!