2012-08-13 23 views
28

वर्ग की एक सूची के लिए JSON स्ट्रिंग deserialise करने के लिए, अलग से सूचीबद्ध तरीके StackOverflow questionजैक्सन - Deserialising JSON स्ट्रिंग - TypeReference बनाम TypeFactory.constructCollectionType

टाइप 1 (docs link):

List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class)); 

टाइप 2 (docs link):

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { }); 

हालांकि ऊपर 2 प्रकार के दोनों काम नौकरी करते हैं, इन कार्यान्वयन के बीच क्या अंतर है ?

उत्तर

29

JavaType बनाने के बाद, दोनों समान deserialization कार्यक्षमता को कॉल करते हैं, इसलिए केवल अंतर ही जेनेरिक प्रकार को संभाला जाता है।

दूसरा एक पूरी तरह स्थिर है, इसलिए प्रकार संकलन प्रकार में जाना जाना चाहिए, और अलग-अलग नहीं हो सकता है। तो यह मूल वर्ग शाब्दिक का उपयोग करने के समान है।

पहला एक गतिशील है, इसलिए इसका उपयोग उन पैरामीटरों के निर्माण के लिए किया जा सकता है जो उनके पैरामीटर के संबंध में भिन्न होते हैं।

व्यक्तिगत रूप से मैं सभी मामलों के लिए पहला विकल्प पसंद करता हूं (यह एक और अज्ञात आंतरिक कक्षाओं के निर्माण से बचाता है), लेकिन दूसरा एक और अधिक पठनीय हो सकता है।

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