我试图尝试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这两个陈述基本上是在尝试做同样的事情吗?
答案 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>>());