Comment vérifier les types de clé et de la valeur si l'Objet instanceof table de hachage?
J'ai une méthode qui accepte un Objet. Dans un cas d'utilisation, la méthode accepte un HashMap<String, String>
et définit chaque valeur de la propriété de la clé correspondante nom.
public void addHelper(Object object) {
if (object instanceof HashMap) {
HashMap<String, String> hashMap = (HashMap<String, String>) object;
this.foo = hashMap.get("foo");
this.bar = hashMap.get("bar");
}
}
Cette classe adhère à une interface particulière, l'ajout d'ouvreurs de ces propriétés n'est pas une option.
Ma question est, comment puis-je vérifier le type de fonte d'ici?
HashMap<String, String> hashMap = (HashMap<String, String>) object;
Merci d'avance!
SOLUTION
Grâce à la réponse de @drobert, voici mon code mis à jour:
public void addHelper(Object object) {
if (object instanceof Map) {
Map map = (Map) object;
if (map.containsKey("foo")) this.foo = map.get("foo").toString();
if (map.containsKey("bar")) this.bar = map.get("bar").toString();
}
}
Voulez-vous dire, comment faire pour supprimer décoché fonte d'avertissement que vous obtenez?
Vous pouvez utiliser if (obj instanceof String) { //votre code }
L'objet est un
U peut type cast HashMap hashMap = (HashMap) de l'objet;Il travaillera avec des avertissements.
Vous pouvez utiliser if (obj instanceof String) { //votre code }
L'objet est un
HashMap<String,String>
pas String
U peut type cast HashMap hashMap = (HashMap) de l'objet;Il travaillera avec des avertissements.
OriginalL'auteur Shaun Scovil | 2013-10-03
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. En raison du type de l'effacement, la réflexion va vous montrer un exemple de table de hachage, mais les types sont déposés au moment de l'exécution. Effectivement, vous avez HashMap< Object,Object >.
Cela dit, vous avez encore quelques options, et quelques conseils, je vous suggère de prendre. Parmi eux:
En bref: considérez ceci comme n'importe quelle Carte, et de la tentative d'accès aux clés des Chaînes de caractères, même sans le cast, et essayer d'utiliser chaque valeur sous forme de Chaîne en faisant un nul vérifier, puis de l'appel .toString() et vous aurez un beaucoup plus sûr de mise en œuvre.
OriginalL'auteur drobert
Il convient de noter que, à l'origine de routine est exactement l'équivalent de codage
Explicite
(HashMap)
fonte ne peut pas jeter une erreur, car il est surveillé par lainstanceof
. La implicitement fourni(String)
jette ne lève une erreur si les valeurs retournées à partir de la table de hachage ne sont pas des Chaînes de caractères (ou null).(Par "exactement équivalent à" je veux dire que la même bytecode est produite.)
OriginalL'auteur Hot Licks
Vous devez utiliser try-catch, où vous appelez
addHelper(Object)
méthode. Cela permettra d'assurer votre bon type deHashMap
.OriginalL'auteur Masudul
Maintenant, vous savez que l'objet est du type correct - même une coutume classe abstraite ou autrement.
c'est une solution générique montrant comment le type de manipulation, son fonctionnement, sa trivial à mettre en addHelper
Ce n'est pas la solution générique. S'il vous plaît, exécutez votre code, que vous verrez où l'exception est levée.
Alors, où va l'exception sera levée, et pourquoi?
il obtient jeté sur l'inadéquation de la méthode à l'objet/l'appel de méthodes de mappage sur un non-objet map
OriginalL'auteur false_memories