Արդյո՞ք այն դասերը, որոնք իրականացնում են Serializable-ը, պետք է ունենան առանց փաստարկների կոնստրուկտորներ:

0
8222

Ոչ: Սա տարածված թյուր կարծիք է: Ապասերիալացման գործընթացը չի օգտագործում օբյեկտի կոնստրուկտորը. օբյեկտը ստեղծվում է առանց կոնստրուկտորի և սկզբնավորվում է սերիականացված օրինակի տվյալների միջոցով: Միակ պահանջը կոնստրուկտորից դասի համար, որն իրականացնում է Սերիալիզացվող այն է, որ իր ժառանգական հիերարխիայում առաջին չսերիալիզացվող գերդասարանը պետք է ունենա առանց փաստարկների կոնստրուկտոր: (Ավելի ամբողջական բացատրության համար տե՛ս http://www.jguru.com/jguru/faq/view.jsp?EID=34802): Սա իմաստ ունի. ապասերիալիզացիան պետք է վերակառուցի ամբողջ օբյեկտի վիճակը, որը ներառում է ցանկացած գերդասերի վիճակը: Եթե ​​սուպերդասը ինքնին սերիալիզացվելի չէ, ապա ապասերիալիզացիան պետք է զրոյից բացահայտի այդ գերդասարանը, հետևաբար՝ պահանջը: Օրինակ՝ հետևյալ դասի հետ.

հանրային դասի MySerializableClass-ն իրականացնում է Serializable { ... }

դուք անում եք Նշում անհրաժեշտ է առանց փաստարկների կոնստրուկտոր: MySerializableClass համապատասխանում է բոլոր պահանջներին, քանի որ նրա առաջին ոչ սերիականացված գերդասարանը, Օբյեկտ, ունի առանց փաստարկների կոնստրուկտոր։ Հետևյալ օրինակում.

հանրային դաս MyFirstClass { } հանրային դաս MySecondClass ընդլայնում է MyFirstClass-ի Serializable հավելվածները { ... }

MyFirstClass ունի լռելյայն, առանց փաստարկների կոնստրուկտոր, ուստի այլ կոնստրուկտոր պետք չէ: Եթե, այնուամենայնիվ, MyFirstClass սահմանված կոնստրուկտորներ, որոնք ընդունում էին արգումենտները՝ առանց նաև բացահայտորեն հայտարարագրելու առանց փաստարկի կառուցող, ապա դուք կստանաք NotSerializableExceptin երբ փորձում են սերիականացնել MySecondClass.

Իրականացնող օբյեկտի բոլոր պահանջները Սերիալիզացվող նշված են http://www.jguru.com/jguru/faq/view.jsp?EID=31434 կայքում: