Ich habe eine Methode, die ein Objekt akzeptiert. In einem Anwendungsfall akzeptiert die Methode HashMap<String, String>
und setzt jeden Wert auf die Eigenschaft des entsprechenden Schlüsselnamens.
Diese Klasse ist an eine bestimmte Schnittstelle gebunden, daher ist das Hinzufügen von Settors für diese Eigenschaften keine Option.
Meine Frage ist, wie kann ich den Typ Cast hier überprüfen?
%Vor%Vielen Dank im Voraus!
LÖSUNG
Dank der Antwort von @drobert, hier ist mein aktualisierter Code:
%Vor%Sie können nicht. Aufgrund der Typlöschung zeigt die Reflektion an, dass Sie eine Instanz von HashMap haben, aber die Typen werden zur Laufzeit gelöscht. Effektiv haben Sie HashMap & lt; Objekt, Objekt & gt;.
Das heißt, Sie haben immer noch einige Optionen und einen Ratschlag, den ich vorschlagen würde. Unter ihnen:
Kurz gesagt: Behandle das wie jede Map und versuche, auch ohne die Besetzung auf die Schlüssel als Strings zuzugreifen, und versuche, jeden Wert als String zu verwenden, indem du einen Null-Check durchführst und dann .toString () aufruft eine viel sicherere Implementierung.
Es sollte beachtet werden, dass die ursprüngliche Routine genau der Codierung entspricht
%Vor% Die explizite (HashMap)
-Wiedergabe kann möglicherweise keinen Fehler auslösen, da sie von instanceof
geschützt wird. Die implizit bereitgestellten (String)
-Abtastungen werden nur dann einen Fehler ausgeben, wenn die von der HashMap zurückgegebenen Werte keine Strings (oder Nullen) sind.
(Mit "genau gleich" bedeutet, dass derselbe Bytecode erzeugt wird.)
Nun wissen Sie, dass das Objekt vom richtigen Typ ist - sogar eine benutzerdefinierte abstrakte Klasse oder sonst.
Tags und Links java object unchecked-cast