java for जावा में अनियंत्रित कॉल चेतावनी कैसे ठीक करें?



java platform (2)

जहाँ तक इस समस्या का सवाल है, आपको प्रायोगिक प्रकार की चाबियों का उपयोग करना चाहिए जैसे

Set<TypeOfKeyObject> keys = map.keySet();
SortedSet<TypeOfKeyObject> s = new TreeSet<TypeOfKeyObject>(keys);

जहाँ TypeOfKeyObject आपके map ऑब्जेक्ट में ऑब्जेक्ट का प्रकार है।

आप चेतावनियों को दबा सकते हैं (जैसा कि पहले से ही सही ढंग से सुझाया गया है) लेकिन उचित नहीं है।

कृपालु लगने के जोखिम पर, मैं आपको जेनरिक का अध्ययन करने का सुझाव दूंगा। एक अच्छा प्रारंभिक बिंदु यह होगा: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

यहाँ कोड मैंने लिखा है?

Set keys = map.keySet();
SortedSet s = new TreeSet(keys);

मुझे जो चेतावनी मिल रही है वह है:

warning: [unchecked] unchecked call to TreeSet(java.util.Collection<? extends E>) as a
         member of the raw type java.util.TreeSet

मैं संकलक चेतावनी से कैसे छुटकारा पाऊं?


Answer #1

आदर्श रूप से, पूरी तरह से जेनरिक का उपयोग करना शुरू करें। आपने यह नहीं दिखाया कि map का प्रकार क्या है, लेकिन आदर्श रूप से आपको कुछ लिखने में सक्षम होना चाहिए:

Set<String> keys = map.keySet();
SortedSet<String> s = new TreeSet<String>(keys);

यह उस स्थिति में होगा जहां map कुछ ऐसा था जैसा Map<String, Integer>

यदि map स्वयं एक कच्चा प्रकार है, तो यह कठिन है - फिर से, सबसे अच्छा फिक्स अपने कोड आधार में जेनरिक को जोड़ना शुरू करना होगा, कच्चे प्रकार से छुटकारा पाना। यह हमेशा संभव नहीं है, अगर नक्शा तीसरे पक्ष के कोड से लौटा है, तो निश्चित रूप से। उस स्थिति में, आपको एक प्रकार की चेतावनियों को दबाने की आवश्यकता हो सकती है क्योंकि आप कच्चे प्रकारों से जेनेरिक प्रकारों में परिवर्तित होते हैं - संभवतः Collections.checkedCollection माध्यम से - लेकिन उसके बाद, आपको जेनेरिक प्रकार "ठीक से" काम करने में सक्षम होना चाहिए। उदाहरण के लिए:

@SuppressWarnings("unchecked") // Just for this one statement
Collection<String> keys = Collections.checkedCollection(map.keySet(),
                                                        String.class);

// Now this statement is fully generic with no warnings
SortedSet<String> s = new TreeSet<String>(keys);




java