2010-11-28 8 views
30

Mein Problem kommt von einem Iterator von einem JSONObject.Typ Sicherheitswarnung mit JSON Iterator

-Code in seiner einfachsten Form zu erzeugen Fehler:

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); 
} 

Die genaue Warnung: Typ Sicherheit: Der Ausdruck vom Typ Iterator muss nicht markiert Umwandlung in Iterator anzupassen

Die Frage ist also, wie kann Ich lösche diese Warnung?

Vielen Dank!

Antwort

92

Ich weiß, das ein alter Thread, aber für zukünftige Forscher ...

Sie können auch eine generische schließen und die Erträge der Iteratormethoden werfen ...

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

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

+1 Scheint, dass dies die bessere/beste Antwort ist. – Ben

+0

Ja, das sollte die verifizierte Antwort sein. Beseitigt die Warnung, ohne sie unterdrücken zu müssen. – videogameboy76

+1

Dies kann die Warnung unterdrücken, jedoch (String) i.next() kann möglicherweise eine Laufzeitausnahme auslösen. – ForeverStudent

4

Wenn Sie Ihren Code mit alten Legacy-APIs mischen, können Sie diese Art von Warnungen erhalten. Wenn Sie die Warnung "wirklich" löschen möchten, können Sie die Annotation SuppressWarnings verwenden. Es empfiehlt sich, einen Kommentar neben der unterdrückten Warnung zu hinterlassen. In Ihrem Fall sieht das so aus:

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

Prost!

+1

Ich hatte gehofft, dass es könnte einen besseren Weg geben, als es zu unterdrücken. Ich denke, dass das der Kurs sein kann, den ich nehme. – Knossos

+3

@SuppressWarnings ("unchecked") ist eine sehr gefährliche Angewohnheit. Angenommen, "jsonList" könnte null sein - nun, jetzt haben Sie die Warnung ausgeblendet. Ich halte es für ein ernstes Warnzeichen, wenn Entwickler meines Teams dies nutzen, um Warnungen zu verbergen. Es ist "gute Übung", niemals Klebeband über die Motorwarnleuchte zu legen, unabhängig davon, welchen Kommentar Sie auf das Band schreiben. Amendment: Wenn Sie darüber nachdenken, geben Sie mindestens die Art der Warnung an, die unterdrückt werden soll, so dass der Null-Fall nicht anwendbar ist. Meinetwegen. Aber es ist immer noch eine gefährliche Angewohnheit, und die andere Antwort bietet eine elegantere Lösung. – DreadPirateShawn

+0

Das Unterdrücken von Warnungen ist im Allgemeinen eine schlechte Idee, aber in diesem Fall ist es in Ordnung. Laut der Dokumentation "Namen sind eindeutige Strings, die nicht Null sind". Ich nehme an, wenn Sie besonders vorsichtig sein wollen, könnten Sie das Generische nehmen und es selbst untersuchen, aber ich vermute, dass das Vertrauen in die Dokumente in diesem Fall in Ordnung ist. –