Dieser Code generiert eine Warnung: Type safety: Die Methode put (Object, Object) gehört zum rohen Typ Map. Verweise auf den generischen Typ Map & lt; K, V & gt; sollte parametrisiert werden .
%Vor%Dieser Code generiert eine Warnung: Type safety: Deaktivierter Cast von Map to Map & lt; String, Serializable & gt; .
Die Methode getSession gehört zu Struts2 und kann daher nicht geändert werden. Ich möchte vermeiden, @SuppressWarnings zu verwenden, weil andere Warnungen nützlich sein können.
Ich denke, dass alle Struts2-Benutzer auf der Welt demselben Problem gegenüberstanden ... gibt es eine elegante Lösung?
Ich glaube nicht, dass es einen anderen Weg als @SuppressWarnings ("unchecked") gibt. Ich glaube, du kannst es direkt über die fragliche Zeile setzen und es wird nur diese Zeile unterdrücken.
Bearbeiten: Sie können auch Map<?, ?> session = ActionContext.getContext().getSession();
machen, aber ich bin mir nicht sicher, wie bereit Sie das tun sollen; Sie werden nicht in der Lage sein, etwas so in die Karte zu schreiben (da der Compiler nicht überprüfen kann, was Sie gerade schreiben), lesen Sie nur davon.
Der sicherste und effizienteste Weg, um damit umzugehen, ist wahrscheinlich:
%Vor%und geben Sie dann die aus der Sitzungszuordnung abgerufenen Objekte ein.
Der @SuppressWarnings-Ansatz führt tatsächlich zu kompiliertem Code, der identisch ist. Die Typumwandlung ist jedoch implizit; d.h. es wird nicht leicht zu erkennen sein, wenn man den Quellcode betrachtet. Und die Annotation @SuppressWarnings könnte (hypothetisch) eine andere Warnung im selben Codeblock unterdrücken, die einen echten Fehler darstellt. d. h. einer, der dazu führt, dass eine der versteckten Typumwandlungen usw. zur Laufzeit fehlschlägt.
Andere teurere Alternativen sind:
ein Eintrag nach Eintragskopie von Map<?, ?>
in eine neue Map<String, Serializable>
-Instanz, wobei die Schlüssel und Werte nach String
bzw. Serializable
oder
Eine generische Methode wie die folgende, die die Typumwandlung sicher durchführt.
Es fordert Sie auf, den Wert zu parametrieren, wenn der Wert Parameter benötigt, und diese dann übergeben.
Zum Beispiel
%Vor% gibt eine Warnung für "parametrisiert" Map<Integer, Map>
.
Das richtige Format lautet also:
%Vor%