[英]Nested HashMaps and Declaration
我正在尝试使用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
}
这两个语句本质上不是在尝试做同一件事吗?
甲Map<String, Map<String, Object>>
是不的子类型Map<String, Object>
,即使Map<String, Object>
是的子类型Object
。
实际上,您可以在后者中存储所需的任何对象,而您只能在前者中存储Map<String, Object>
实例。 这就是为什么编译器不允许您将Map<String, Map<String, Object>>
传递给以Map<String, Object>
为参数的方法。
如果允许的话,该方法可以将Strings,Integers或Bananas存储到地图中,这将破坏地图的类型安全性,假定该地图仅包含Map<String, Object>
实例。
或者,您可以使FunctionA方法如下:
public static String FunctionA(Map<String, ? extends Object> filters) throws Throwable{
//logic goes here
}
这样做会很高兴!
FunctionA(new HashMap<String, LinkedHashMap<String, Object>>());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.