Wie löst man das Java type safety Warnung?
Map session = ActionContext.getContext().getSession();
session.put("user", user);
Dieser code generiert eine Warnung: Geben Sie Sicherheit: Die Methode put(Object, Object) gehört zu den raw-type-Map. Verweise auf generische Art Map<K V> sollte parametrisierte.
Map<String, Serializable> session = (Map<String, Serializable>)ActionContext.getContext().getSession();
session.put("user", user);
Dieser code generiert eine Warnung: Type safety: Unchecked cast von Map zu Map<String,Serializable>.
getSession - Methode gehört zu Struts2, so kann ich nicht ändern. Ich möchte vermeiden, mit @SuppressWarnings, weil andere Warnungen können nützlich sein.
Denke ich, alle Struts2 Benutzer in der ganzen Welt vor dem gleichen problem... gibt es eine elegante Lösung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es keine andere Möglichkeit, aber @SuppressWarnings("unchecked"). Ich glaube, Sie können es nur über die Linie in Frage, und es wird nur unterdrückt diese Zeile.
Edit: du kannst auch
Map<?, ?> session = ActionContext.getContext().getSession();
aber ich bin mir nicht sicher, inwiefern Sie bereit sind, das zu tun; Sie werden nicht in der Lage, etwas in die Karte, dass der Weg (da der compiler kann nicht überprüfen, die Art von, was Sie setzen sind), nur Lesen zu können.Den sichersten und effektivsten Weg, damit umzugehen, ist wahrscheinlich:
und geben Sie dann Stimmen die abgerufenen Objekte aus der Sitzung anzeigen.
Die @SuppressWarnings-Ansatz tatsächlich in kompilierter code, der identisch ist. Aber die Typumwandlung wird auch implizit sein, D. H. es wird nicht leicht sein, zu erkennen durch den Blick auf den source-code. Und die @SuppressWarnings annotation könnte (rein hypothetisch) unterdrücken einige anderen Warnung im selben code-block, ist eine echte Fehler; d.h. das wird in einer Folge der versteckten Typumwandlungen, etc in Ermangelung an Laufzeit.
Anderen, teureren alternativen sind:
einen Eintrag, indem Sie den Eintrag kopieren aus der
Map<?, ?>
zu einem neuenMap<String, Serializable>
Instanz wirft die Schlüssel und Werte inString
undSerializable
beziehungsweise, odereine generische Methode, wie das folgende ausführt, die die Typumwandlung sicher.
Welche version von Struts 2 (besonders
XWork
) verwenden Sie? Für mich, Ihr folgenden code gibt einen Fehler:Diese, auf der anderen Seite, funktioniert und gibt keine Warnungen:
Es ist, in der Sie aufgefordert werden, um parametrieren Sie den Wert, wenn der Wert der Parameter muss dann passieren Sie.
Beispielsweise
wird die Warnung für "parametrisierte"
Map<Integer, Map>
.also das richtige format ist das folgende:
Was ist, wenn Sie es so machen:
Cast wie Folgt
schreiben Sie einfach
@SuppressWarnings("unchecked")
an der Spitze des@GET
Methode, hoffe es wird Euch helfen.