2009-02-10 5 views

Répondre

1

Vous voulez dire quelque chose comme ce qui suit méthode générique?

static <U,V,W> W putNestedEntry(
     Map<U,Map<V,W>> nest, 
     U nestKey, 
     V nestedKey, 
     W nestedValue) 
{ 
    Map<V,W> nested = nest.get(nestKey); 

    if (nested == null) 
    { 
     nested = new HashMap<V,W>(); 
     nest.put(nestKey, nested); 
    } 

    return nested.put(nestedKey, nestedValue);   
} 
+0

J'essayais de tricher un moyen de sortir imbriqué avec un nest.get (nestKey). Ce que je me préparais à faire était de faire une erreur stupide. Merci pour la vérification de la réalité. – WolfmanDragon

0

Je ne sais pas ce que vous voulez dire. Je pense que vous voulez ajouter à la carte imbriquée comme ce qui suit:

nest.get(nestKey).put(nestedKey, nestedValue); 

Ce n'est pas possible car le get sur la carte externe retourne une carte de type Map<?, ?>. Vous ne pouvez pas invoquer la méthode put sur celle-ci. Le wildcard illimité '?' devrait être utilisé si vous ne connaissez pas le type de contenu d'une collection mais que vous voulez les considérer comme des objets. Si vous voulez lire et modifier le contenu et que la carte contient des objets hétérogènes, vous pouvez simplement utiliser le type brut. C'est quelque chose comme:

Map<?, Map> nest; 

La meilleure façon est bien sûr (si possible), d'utiliser une carte homogène et préciser son type. Par exemple. Map<String, String>

+0

Vous avez raison dans l'interprétation de ce que je voulais dire. Je voulais que cela soit générique, je vais changer cela en utilisant des génériques comme types. – WolfmanDragon

1

Il est un langage assez commun soit:

  • ont une carte d'une carte que vous suggérer
  • ont une carte, où vos clés se combinent clé « main » et « sous-clé » (peut-être une utilisation plus efficace de l'espace, mais en général moins approprié si vous devez itérer clés et sous-clés)
+0

combiner la clé et la sous-clé, comme l'utilisation de plusieurs clés dans SQL pour créer une clé primaire, mais fait avec la concaténation à la place? – WolfmanDragon

0

Essayez cette

si (nest.containsKey (nestKey)) { ((Carte) nest.get (nestKey)) mettre (nestedKey, nestedValue). }

Questions connexes