कुछ जावा जेनरिक कास्ट्स में टाइप सेफ्टी वार्निंग का क्या मतलब है?

Translate

का अर्थ क्या है?जावा चेतावनी?

टाइप सेफ्टी: ऑब्जेक्ट से लिस्ट <Integer> तक का कास्ट दरअसल मिटाए गए टाइप लिस्ट के खिलाफ जांच कर रहा है

मुझे यह चेतावनी तब मिलती है जब मैं किसी वस्तु को जेनेरिक जानकारी के साथ टाइप करने की कोशिश करता हूं, जैसे कि निम्न कोड में:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
This question and all comments follow the "Attribution Required."

सभी उत्तर

Translate

यह चेतावनी वहाँ है क्योंकि जावा वास्तव में रन-टाइम पर उस प्रकार की जानकारी संग्रहीत नहीं कर रहा है जो जेनेरिक का उपयोग करता है। इस प्रकार, यदिobjectवास्तव में हैList<String>, वहाँ नहीं होगाClassCastExceptionरन-टाइम के अलावा, जब तक कि किसी आइटम को उस सूची से एक्सेस नहीं किया जाता है जो वैरिएबल में परिभाषित जेनेरिक प्रकार से मेल नहीं खाती है।

यदि आइटम को सूची में जोड़ा जाता है, तो यह गलत सामान्य प्रकार की जानकारी के साथ आगे की जटिलताएं पैदा कर सकता है। कोई भी कोड अभी भी सूची का संदर्भ रखता है लेकिन सही जेनेरिक प्रकार की जानकारी के साथ अब एक असंगत सूची होगी।

चेतावनी निकालने के लिए, प्रयास करें:

List<?> list = (List<?>) object;

हालाँकि, ध्यान दें कि आप कुछ विधियों जैसे ऐड का उपयोग नहीं कर पाएंगे क्योंकि कंपाइलर को यह पता नहीं है कि क्या आप गलत प्रकार का ऑब्जेक्ट जोड़ने का प्रयास कर रहे हैं। उपरोक्त बहुत सी स्थितियों में काम करेगा, लेकिन अगर आपको ऐड, या कुछ इसी तरह की प्रतिबंधित विधि का उपयोग करना है, तो आपको बस ग्रहण (या एक) में पीले रंग की रूपरेखा को भुगतना होगाSuppressWarningएनोटेशन)।

स्रोत