2014-06-17 4 views
1

Je suis en train d'expérimenter avec Map s et j'ai ce doute:Nested HashMaps et Déclaration

Map<String, Object> input = new LinkedHashMap<String, Object>(); 
String operator = "in"; 
String argument = "foo"; 
String field = "AvailabilityStatus"; 
Map<String, Object> innerMap = new LinkedHashMap<String, Object>(); 
innerMap.put(operator, argument); 
input.put(field, innerMap); 

L'appel de fonction pour le code ci-dessus est

String output = FunctionA(input); 

semble fonctionner très bien mais changer l'entrée à:

Map<String, Map<String, Object>> input = new LinkedHashMap<String, LinkedHashMap<String, Object>>(); 

ne me laisse pas appeler la fonction de la même manière. Le functionA est:

public static String FunctionA(Map<String, Object> filters) throws Throwable { 
//logic goes here 
} 

ne sont pas les deux déclarations essentiellement essayer de faire la même chose?

+0

_doesn't me laisser appeler la fonction même way_ s'il vous plaît élaborer –

+0

comme, pourquoi ne puis-je faire une carte imbriquée avec une carte à la fois mettre en œuvre un LinkedHashMap? – chipmunk

+2

'Carte ' et 'Carte >' ne sont pas la même chose. Est-ce ce que vous demandez? –

Répondre

1

Alternativement, vous pouvez faire la méthode fonctionn comme ceci:

public static String FunctionA(Map<String, ? extends Object> filters) throws Throwable{ 
//logic goes here 
} 

Faire cela sera heureux alors!

FunctionA(new HashMap<String, LinkedHashMap<String, Object>>()); 
1

Un Map<String, Map<String, Object>> n'est pas un sous-type de Map<String, Object>, même si Map<String, Object> est un sous-type de Object.

En effet, vous pouvez stocker tout objet que vous voulez dans ce dernier, alors que vous ne pouvez stocker que Map<String, Object> instances dans le premier. C'est pourquoi le compilateur ne vous laisse pas passer un Map<String, Map<String, Object>> à une méthode prenant un argument Map<String, Object>. Si cela vous permettait de le faire, la méthode pourrait stocker des chaînes, des entiers ou des bananes dans la carte, ce qui ruinerait ainsi la sécurité de type de la carte, supposée ne contenir que des instances de Map<String, Object>.