2011-03-14 15 views
32

यह कोड है जो मैंने लिखा है?जावा में अनचेक कॉल चेतावनी को कैसे ठीक करें?

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 

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

+2

हम अपने कोड के अधिक देखने के लिए की आवश्यकता होगी (संदर्भ देखने के)। मुझे संदेह है क्योंकि आप जेनेरिक का उपयोग नहीं कर रहे हैं और कास्टिंग नहीं कर रहे हैं, लेकिन फिर ... अगर आप उस कोड को पोस्ट नहीं करते हैं जो चेतावनी पैदा कर रहा है, तो हम इतना नहीं कर सकते लेकिन अनुमान लगा सकते हैं। –

उत्तर

43

आदर्श रूप से, जेनिक्स का पूरी तरह से उपयोग शुरू करें। आप से पता चला है नहीं क्या 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); 
23

जहां तक ​​इस समस्या का संबंध है, आप चाबियों का पैरामिट्रीकृत प्रकार जैसे:

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

TypeOfKeyObject अपने map वस्तु में कुंजी का उद्देश्य होता है, जहां का उपयोग करना चाहिए।

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

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

+10

"पैरामीटरयुक्त प्रकार की चाबियों का उपयोग करें" सही उत्तर है और पर्याप्त है। ओपी को बताते हुए "आपको जेनेरिक का अध्ययन करने की आवश्यकता है" संवेदनात्मक है। अगर हमने अध्ययन किया था, तो हमें एसओ की आवश्यकता नहीं होगी, अब हम? मैं फिर भी ऊपर उठाया। :- पी –

+11

आप न तो उसे मछली दे रहे हैं और न ही उसे मछली के लिए सिखा रहे हैं; तुम उसे पुस्तकालय से मछली पकड़ने पर एक किताब की जाँच करने के लिए कह रहे हैं। – Paul

+3

मैं उसे दूसरा पैराग्राफ में मछली दे दी है। मछली पकड़ने पर किताब कैसे उसे बताना एक तरह से संचार के बारे में हमारी मध्यम दी मछली है। :) आराम से। – Nishant

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

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