繁体   English   中英

嵌套的HashMap和声明

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM