Eclipse gibt mir eine Warnung der folgenden Form:
Typ Sicherheit: Ungeprüfter Cast von Object nach HashMap
Dies stammt aus einem Aufruf an eine API, über die ich keine Kontrolle habe und die Object zurückgibt:
HashMap<String, String> getItems(javax.servlet.http.HttpSession session) {
HashMap<String, String> theHash = (HashMap<String, String>)session.getAttribute("attributeKey");
return theHash;
}
Ich möchte Eclipse-Warnungen nach Möglichkeit vermeiden, da sie theoretisch zumindest auf ein potenzielles Codeproblem hinweisen. Ich habe allerdings noch keine gute Möglichkeit gefunden, dieses Problem zu beseitigen. Ich kann die einzelne betroffene Zeile in eine eigene Methode auslagern und Folgendes hinzufügen @SuppressWarnings("unchecked")
zu dieser Methode, wodurch die Auswirkungen eines Codeblocks, in dem ich Warnungen ignoriere, begrenzt werden. Gibt es bessere Möglichkeiten? Ich möchte diese Warnungen in Eclipse nicht ausschalten.
Bevor ich zu dem Code kam, war es einfacher, aber es gab trotzdem Warnungen:
HashMap getItems(javax.servlet.http.HttpSession session) {
HashMap theHash = (HashMap)session.getAttribute("attributeKey");
return theHash;
}
Das Problem war, dass an anderer Stelle, wenn man versuchte, den Hash zu verwenden, Warnungen angezeigt wurden:
HashMap items = getItems(session);
items.put("this", "that");
Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type HashMap<K,V> should be parameterized.
0 Stimmen
Wenn Sie HttpSession auf diese Weise verwenden, lesen Sie den Artikel von Brian Goetz zu diesem Thema: ibm.com/developerworks/library/j-jtp09238.html
0 Stimmen
Wenn ein ungeprüfter Cast unvermeidbar ist, ist es eine gute Idee, ihn mit etwas zu koppeln, das seinen Typ logisch repräsentiert (wie ein
enum
oder sogar Instanzen vonClass<T>
), so dass Sie einen Blick darauf werfen können und savoir es ist sicher.4 Stimmen
Verwandt/dupe: Typensicherheit: Ungeprüfter Wurf
3 Stimmen
Mögliche Duplikate von Typensicherheit: Ungeprüfter Wurf
1 Stimmen
Ich möchte hinzufügen, dass ich nur @SuppressWarnings("unchecked") auf der Ebene der Methode hinzufügen konnte, die den beanstandeten Code enthält. Also habe ich den Code in eine Routine umgewandelt, in der ich dies tun musste. Ich dachte immer, man könne dies direkt über der betreffenden Zeile tun.