តើថ្នាក់ដែលអនុវត្ត Serializable តម្រូវឱ្យមិនមាន argument constructors ទេ?

0
8222

ទេ នេះជាការយល់ខុសជាទូទៅ។ ដំណើរការ deserialization មិនប្រើ constructor របស់ object ទេ - object ត្រូវបាន instantiated ដោយគ្មាន constructor និង initialized ដោយប្រើ data instance serialized។ តម្រូវការតែមួយគត់នៅលើ constructor សម្រាប់ថ្នាក់ដែលអនុវត្ត សៀរៀល គឺថា superclass ដែលមិនអាចសៀរៀលបានដំបូងគេនៅក្នុងឋានានុក្រមមរតករបស់វាត្រូវតែមាន constructor គ្មានអាគុយម៉ង់។ (សូមមើល http://www.jguru.com/jguru/faq/view.jsp?EID=34802 សម្រាប់ការពន្យល់ពេញលេញបន្ថែមទៀត)។ វាសមហេតុផល៖ deserialization ត្រូវការដើម្បីស្ថាបនាឡើងវិញនូវស្ថានភាពវត្ថុទាំងមូល ដែលរួមបញ្ចូលទាំងស្ថានភាពនៃ superclasses ណាមួយ។ ប្រសិនបើ superclass មិនអាច serializable ដោយខ្លួនឯងបានទេ នោះ deserialization ត្រូវការធ្វើឱ្យ superclass នោះភ្លាមៗ - ដូច្នេះតម្រូវការ។ ឧទាហរណ៍ជាមួយថ្នាក់ដូចខាងក្រោមៈ

ថ្នាក់សាធារណៈ MySerializableClass អនុវត្ត Serializable { ... }

អ្នកធ្វើ មិនមាន ត្រូវការអ្នកបង្កើតគ្មានអាគុយម៉ង់។ MySerializableClass បំពេញតាមតម្រូវការទាំងអស់ ដោយសារតែ superclass ដែលមិនអាចសៀរៀលបានដំបូងបង្អស់របស់វា វត្ថុ, មាន constructor គ្មានអាគុយម៉ង់។ ក្នុងឧទាហរណ៍ខាងក្រោម៖

ថ្នាក់សាធារណៈ MyFirstClass { } ថ្នាក់សាធារណៈ MySecondClass ពង្រីក MyFirstClass អនុវត្ត Serializable { ... }

MyFirstClass មាន default, no-argument constructor ដូច្នេះមិនចាំបាច់ constructor ផ្សេងទៀតទេ។ បើទោះជាយ៉ាងណា MyFirstClass អ្នកសាងសង់ដែលបានកំណត់ដែលទទួលយកអាគុយម៉ង់ដោយមិនចាំបាច់ប្រកាសយ៉ាងច្បាស់អំពីអ្នកសាងសង់គ្មានអាគុយម៉ង់ បន្ទាប់មកអ្នកនឹងទទួលបាន មិនអាចSerializable លើកលែងតែ នៅពេលព្យាយាមធ្វើស៊េរី MySecondClass.

តម្រូវការទាំងអស់សម្រាប់វត្ថុដែលអនុវត្ត សៀរៀល ត្រូវបានរាយនៅ http://www.jguru.com/jguru/faq/view.jsp?EID=31434 ។