嵌套的HashMaps和声明

时间:2014-06-17 20:26:54

标签: java map nested linkedhashmap

我试图尝试Map,我有这个疑问:

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);

上述代码的函数调用是

String output = FunctionA(input);

似乎工作正常,但将输入更改为:

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

不允许我以同样的方式调用该函数。 functionA是:

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

Aren这两个陈述基本上是在尝试做同样的事情吗?

2 个答案:

答案 0 :(得分:1)

Map<String, Map<String, Object>>不是Map<String, Object>的子类型,即使Map<String, Object>Object的子类型。

实际上,你可以在后者中存储你想要的任何对象,而你只能在前者中存储Map<String, Object>个实例。这就是编译器不允许您将Map<String, Map<String, Object>>传递给以Map<String, Object>为参数的方法的原因。

如果它允许你这样做,该方法可以将字符串,整数或香蕉存储到地图中,这将破坏地图的类型安全性,应该只包含Map<String, Object>的实例。

答案 1 :(得分:1)

或者,您可以像这样制作FunctionAL方法:

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

这样做会很开心!

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