Дали е потребно класите што имплементираат Serializable да имаат конструктори без аргументи?

0
8214

Не. Ова е вообичаена заблуда. Процесот на десеријализирање не го користи конструкторот на објектот - објектот се инстанцира без конструктор и се иницијализира со помош на сериски податоци за примероци. Единствениот услов на конструкторот за класа што имплементира Серијализира е тоа што првата суперкласа што не може да се сериализира во нејзината наследна хиерархија мора да има конструктор без аргументи. (Видете http://www.jguru.com/jguru/faq/view.jsp?EID=34802 за поцелосно објаснување). Ова има смисла: десериализацијата треба да ја реконструира целата состојба на објектот, која ја вклучува состојбата на која било суперкласа. Ако суперкласата сама по себе не може да се серијализира, тогаш десериализацијата треба да ја инстанцира таа суперкласа од нула - со тоа и барањето. На пример, со следната класа:

јавна класа MySerializableClass имплементира Serializable { ... }

ти правиш не потребен е конструктор без аргументи. MySerializableClass ги исполнува сите барања затоа што нејзината прва суперкласа што не може да се серијалира, Објектот, има конструктор без аргументи. Во следниот пример:

јавна класа MyFirstClass { } јавна класа MySecondClass ја проширува MyFirstClass имплементира Serializable { ... }

MyFirstClass има стандарден конструктор без аргументи, така што не е потребен друг конструктор. Ако, сепак, MyFirstClass дефинирани конструктори кои прифаќаат аргументи без исто така експлицитно декларирање на конструктор без аргументи, тогаш ќе добиете NotSerializable Exceptin при обидот за серијалирање MySecondClass.

Сите барања за објект што имплементира Серијализира се наведени на http://www.jguru.com/jguru/faq/view.jsp?EID=31434.