A kërkohet që klasat që zbatojnë Serializable të kenë konstruktorë pa argument?

0
8222

Jo. Ky është një keqkuptim i zakonshëm. Procesi i deserializimit nuk përdor konstruktorin e objektit - objekti instancohet pa një konstruktor dhe inicializohet duke përdorur të dhënat e shembullit të serializuar. Kërkesa e vetme për konstruktorin për një klasë që zbaton Të serializueshëm është se superklasa e parë jo e serializueshme në hierarkinë e saj të trashëgimisë duhet të ketë një konstruktor pa argument. (Shih http://www.jguru.com/jguru/faq/view.jsp?EID=34802 për një shpjegim më të plotë). Kjo ka kuptim: deserializimi duhet të rindërtojë të gjithë gjendjen e objektit, e cila përfshin gjendjen e çdo superklase. Nëse superklasa nuk është në vetvete e serializueshme, atëherë deserializimi duhet të instantojë atë superklasë nga e para – pra kërkesën. Për shembull, me klasën e mëposhtme:

klasa publike MySerializableClass zbaton Serializable { ... }

ju bëni nuk duhet një konstruktor pa argument. MySerializableClass plotëson të gjitha kërkesat sepse superklasa e saj e parë jo e serializueshme, Objekt, ka një konstruktor pa argument. Në shembullin e mëposhtëm:

klasa publike MyFirstClass { } klasa publike MySecondClass zgjeron implementimet e MyFirstClass të Serializueshme { ... }

MyFirstClass ka konstruktorin e paracaktuar, pa argument, kështu që nuk nevojitet konstruktor tjetër. Nëse, megjithatë, MyFirstClass konstruktorë të përcaktuar të cilët pranuan argumente pa deklaruar gjithashtu në mënyrë eksplicite një konstruktor pa argument, atëherë do të merrni një JoSerializableExceptin kur tentohet të serializohet MySecondClass.

Të gjitha kërkesat për një objekt që zbaton Të serializueshëm janë të listuara në http://www.jguru.com/jguru/faq/view.jsp?EID=31434.