2013-07-21 8 views
5

जावा में enum प्रकारों का डिफ़ॉल्ट deserialization readObject और readObjectNoData फेंक InvalidObjectException के रूप में प्रतिबंधित है। इस कारण से एनम प्रकार बिना किसी दोष के सिंगलटन कक्षाओं को लागू करने के लिए एकदम सही हैं (आइटम 77, प्रभावी जावा, द्वितीय संस्करण, ब्लोच)।जावा में enum का deserialization

  • क्यों, पहले हाथ पर, enum प्रकार Serializable लागू करते हैं?
  • प्रैक्टिस में enum संदर्भों को deserialized कैसे होना चाहिए?

उत्तर

3

एनम प्रकार Serializable लागू करते हैं ताकि आप उन वस्तुओं को क्रमबद्ध कर सकें जिनमें enum स्थिरांक होते हैं। एनम स्थिरांक किसी भी अन्य objest के रूप में deserialized हैं: ObjectInputStream.readObject() का उपयोग करके। एनम स्थिरांक सामान्य कक्षाओं के उदाहरणों से भिन्न रूप से एन्कोड किए जाते हैं, इसलिए ObjectInputStream.readObject() उनके readObject विधि को कॉल किए बिना उन्हें deserialize कर सकते हैं। अन्य कक्षाएं हैं जो विशेष एन्कोडिंग का उपयोग करती हैं, उनमें से String और Class हैं। अधिक जानकारी के लिए documentation देखें।

यदि आप धारावाहिक सिंगलटन कक्षाओं को स्वयं लागू करना चाहते हैं, तो readResolve विधि देखें।

+0

ठीक है, बिंदु # 1 का उत्तर यहां दिया गया है। एनम संदर्भ वाले वर्गों को क्रमशः क्रमबद्धता पर क्रैश नहीं होना चाहिए। मैं डिफ़ॉल्ट deserialization की कोशिश करता है, और यह बस काम किया! फिर, क्यों प्रभावी रूप से deserializing enums (कोड पुनः फैक्टरिंग को पूरा करने के लिए) पर चर्चा की बहुत सी पोस्ट है? – abksrv

संबंधित मुद्दे