2010-11-28 69 views
30

我的問題來自從JSONObject獲取Iterator。使用JSON迭代器的類型安全警告

代碼最簡單的形式生成錯誤:

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

當您將代碼與舊的舊版API混合使用時,您可能會收到此類警告。如果你真的想「根除」警告,你可以使用SuppressWarnings註釋。在抑制性警告旁留下評論是一種好的做法。您的情況如下:

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

乾杯!

+1

我希望可能會有比抑制它更好的方法。我認爲這可能是我採取的方法。 – Knossos 2010-11-28 13:15:29

+3

@SuppressWarnings(「unchecked」)是一個非常危險的習慣。假設「jsonList」可能爲空 - 好吧,現在你已經隱藏了警告。如果我的團隊中的任何開發人員使用這個來隱藏警告,我認爲這是一個嚴重的警告信號。無論您在錄像帶上寫什麼評論,都絕對不要在錄像帶警告燈上放置膠帶,這是「良好做法」。 修訂:想想看,您至少指定了禁止的警告類型,所以null情況不適用。很公平。但這仍然是一個危險的習慣,而另一個答案確實提供了一個更優雅的解決方案。 – DreadPirateShawn 2012-08-16 05:32:03