2011-08-10 16 views
5

जावा का संग्रह। चेक * *) एपीआई हमें अंतर्निहित संग्रहों के लिए प्रकार-सुरक्षित दृश्य देता है। लेकिन चेक रनटाइम पर होते हैं और एक रनटाइम अपवाद फेंकते हैं जो प्रदर्शन के लिए महंगा हो सकता है। जेनेरिक संग्रह का उपयोग करके उन संग्रहों को एक विशिष्ट प्रकार देकर संकलित समय पर एक ही प्रकार की जांच लागू की जा सकती है। ऐसे में ऐसी स्थितियां हैं जहां संग्रह। चेक * *) सामान्य प्रकार के संग्रह के साथ उनके प्रकार निर्दिष्ट हैं?जावा संग्रह। चेक * *) बनाम जेनेरिक संग्रह

उत्तर

10

जावाडोक यह अच्छी तरह से बताते हैं:

http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#checkedCollection%28java.util.Collection,%20java.lang.Class%29

भाषा में जेनरिक तंत्र संकलन समय (स्थिर) जाँच टाइप प्रदान करता है, लेकिन यह अनियंत्रित डाले के साथ इस तंत्र को हराने के लिए संभव है। आम तौर पर यह कोई समस्या नहीं है, क्योंकि संकलक ऐसे सभी अनचेक परिचालनों पर चेतावनियां जारी करता है। हालांकि, ऐसे समय होते हैं जब स्थिर प्रकार की जांच अकेली नहीं होती है। उदाहरण के लिए, मान लीजिए कि संग्रह किसी तृतीय-पक्ष लाइब्रेरी को पास किया गया है और यह आवश्यक है कि लाइब्रेरी कोड गलत प्रकार के तत्व को सम्मिलित करके संग्रह को दूषित न करे।

0

एक नई 1.5+ परियोजना में अनचेक प्रकार वाले पुराने पुस्तकालय का उपयोग करते समय।

+1

क्योंकि आप एक वित्तीय कंपनी में काम करते हैं, जब आपको लाइब्रेरी बदलने की ज़रूरत होती है, और कई महीनों में नौकरशाही प्रक्रिया का सामना करना पड़ता है। हाँ, आप सही हैं, मुझे बेहतर काम मिलना चाहिए .... –

5

मुख्य अंतर यह है कि संकलन-समय की जांच आसानी से और जानबूझकर दोनों को घुमाया जा सकता है।

कंपाइलर आपको चेतावनी देगा, अगर ऐसा होता है, लेकिन चेतावनियों को आसानी से अनदेखा किया जाता है और समस्या कुछ लाइब्रेरी में कहीं भी हो सकती है। जेनेरिक द्वारा प्रदान की गई प्रकार की जानकारी विश्वसनीय है, लेकिन केवल यदि सभी कोड जेनेरिक से संबंधित किसी भी चेतावनी के बिना संकलित किए गए हैं: कोई अनचेक कास्ट नहीं, कच्चे प्रकार नहीं।

Collections.checked*() का उपयोग करके आप प्रतिबंध को लागू करने का एक तरीका देते हैं, भले ही आपके नियंत्रण से बाहर कोड का उपयोग करते समय भी (जब तक आप अपने स्वयं के संग्रह में पास कर सकें)।

1

Collectons.checkedXxxxx() रनटाइम चेक करता है अतिरिक्त सुरक्षा प्रदान करता है। कंपाइलर को टाइप एरर का उपयोग करके टाला जा सकता है, हालांकि चेक किए गए संग्रहों को हमेशा जांचना चाहिए कि प्रकार सही है।

मुझे संदेह है कि प्रदर्शन अंतर चिंता करने के लिए पर्याप्त है। यह लगभग 10 एनएस या उससे कम होने की संभावना है।

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