2010-08-23 7 views
0

J'ai un méthodolo-Coulée et récupération d'un ensemble clé d'une carte

private void mapSomething(Class<?> dataType){ 

    if(dataType.isInstance(Map.class)){ 
     // How do I get the key set of the map 
    } 
} 

méthode est appelée comme-

mapSomething(someHashMap.getClass()); // Hash Map 

Comment puis-je obtenir l'ensemble clé de la carte dans la méthode?

Répondre

1

Vous pouvez jeter un Map et récupérer le jeu de clés. Si vous le souhaitez, vous pouvez également ajouter le paramètre générique illimité <?> à la carte et définir.

Mais vous ne passez dans la classe du type de données. Vous devez également passer dans l'instance réelle. Par exemple.

mapSomething(someHashMap.getClass(), someHashMap) 

Et la mise en œuvre devient:

void mapSomething(Class<?> dataType, Object instance) 
    { 
     if(dataType.isInstance(Map.class)){ 
      Map<?,?> map = (Map<?,?>)instance; 
      Set<?> keySet = map.keySet(); 
     } 
    } 

Altenatively, vous pouvez simplement passer l'instance, et non la classe

void mapSomething(Object instance) 
    { 
     if(instance instanceof Map){ 
      Map<?,?> map = (Map<?,?>)instance; 
      Set<?> keySet = map.keySet(); 
     } 
    } 
+0

Mais il y a une déclaration de la carte qui est passée. Ne pouvons-nous pas utiliser le nom (getName) du dataType pour utiliser la carte? –

+0

'getName' renvoie juste ce qu'il est censé faire, le nom de la classe. Pas moyen de revenir à l'instance, une fois que vous avez passé dans une classe. – whiskeysierra

4

Vous n'êtes pas fait passer dans une instance de carte (juste ses données de classe). Si vous pouvez changer votre signature de méthode pour quelque chose comme ceci, ce serait assez facile:

private void mapSomething(Object data){ 
    if(data instanceof Map){ 
     ((Map)data).keySet() 
    } 
}