2010-11-28 14 views
30

के साथ सुरक्षा चेतावनी टाइप करें मेरी समस्या एक JSONObject से Iterator प्राप्त करने से आता है।JSON Iterator

कोड अपने सरलतम रूप में त्रुटि पैदा:

String json = client.retrieveList(); 
JSONObject jsonList = new JSONObject(json); 
Iterator<String> i = jsonList.keys(); 

while(i.hasNext()) 
{ 
    String next = i.next(); 
    JSONArray jsonArray = jsonList.getJSONArray(next); 
    // Do stuff with jsonArray, example: jsonArray.getString(0), jsonArray.getString(1); 
} 

सटीक चेतावनी है: प्रकार की सुरक्षा: प्रकार इटरेटर की अभिव्यक्ति

iterator के अनुरूप अनियंत्रित रूपांतरण की जरूरत है तो सवाल यह कैसे कर सकते है मैं इस चेतावनी को खत्म कर देता हूं?

बहुत धन्यवाद!

उत्तर

92

मैं जानते हैं कि यह वर्ष धागा है, लेकिन भविष्य खोजकर्ताओं के लिए ...

आप भी एक सामान्य चुन लेगा और इटरेटर तरीकों में से रिटर्न डाली कर सकते हैं ...

Iterator<?> i = jsonList.keys(); 

while(i.hasNext()) 
{ 
    String next = (String) i.next(); 
    ... 
+4

+1 लगता है कि यह बेहतर/सर्वोत्तम उत्तर है। – Ben

+0

हां, यह सत्यापित उत्तर होना चाहिए। इसे दबाने के बिना चेतावनी को समाप्त करता है। – videogameboy76

+1

यह चेतावनी को दबा सकता है, हालांकि (स्ट्रिंग) i.next() संभावित रूप से रनटाइम अपवाद फेंक सकता है। – ForeverStudent

4

जब आप पुरानी विरासत API-s के साथ अपना कोड मिलाते हैं तो आप इस तरह की चेतावनियां प्राप्त कर सकते हैं। यदि आप वास्तव में चेतावनी "उन्मूलन" करना चाहते हैं तो आप SuppressWarnings एनोटेशन का उपयोग कर सकते हैं। दबाने वाली चेतावनी के बगल में एक टिप्पणी छोड़ना एक अच्छा अभ्यास है। आपके मामले में यह ऐसा दिखाई दे सकता है:

@SuppressWarnings("unchecked") //Using legacy API 
Iterator<String> i = jsonList.keys(); 

चीयर्स!

+1

मुझे लगता है कि उम्मीद थी इसे दबाने के बजाय एक बेहतर तरीका हो सकता है। मुझे लगता है कि यह कोर्स हो सकता है हालांकि मैं लेता हूं। – Knossos

+3

@SuppressWarnings ("अनचेक") एक बहुत ही खतरनाक आदत है। मान लीजिए "जेसनलिस्ट" शून्य हो सकता है - ठीक है, अब आपने चेतावनी छिपा दी है। अगर मैं अपनी टीम पर किसी भी देवता चेतावनी छिपाने के लिए इसका उपयोग करता हूं तो मैं इसे एक गंभीर चेतावनी संकेत मानता हूं। इंजन चेतावनी प्रकाश पर टेप लगाने के लिए यह "अच्छी प्रथा" है, भले ही आप टेप पर क्या टिप्पणी लिख सकते हैं। संशोधन: इसके बारे में सोचने के लिए आओ, आप कम से कम दबाने के लिए चेतावनी के प्रकार को निर्दिष्ट कर रहे हैं, इसलिए शून्य मामला लागू नहीं है। काफी उचित। लेकिन यह अभी भी एक खतरनाक आदत है, और दूसरा जवाब एक और अधिक सुरुचिपूर्ण समाधान प्रदान करता है। – DreadPirateShawn

+0

चेतावनियों को दबाकर आम तौर पर एक बुरा विचार है, लेकिन इस मामले में यह ठीक है। प्रलेखन के अनुसार, "नाम अद्वितीय, गैर-शून्य तार हैं।" मुझे लगता है कि अगर आप अतिरिक्त सतर्क रहना चाहते हैं, तो आप सामान्य ले सकते हैं और खुद का निरीक्षण कर सकते हैं, लेकिन मुझे संदेह है कि इस मामले में दस्तावेज़ों पर भरोसा करना ठीक है। –