Java 嵌套哈希映射和声明

Java 嵌套哈希映射和声明,java,map,nested,linkedhashmap,Java,Map,Nested,Linkedhashmap,我正在尝试使用Maps进行试验,我对此表示怀疑: Map<String, Object> input = new LinkedHashMap<String, Object>(); String operator = "in"; String argument = "foo"; String field = "AvailabilityStatus"; Map<String, Object> innerMap = new LinkedHashMap<Stri

我正在尝试使用
Map
s进行试验,我对此表示怀疑:

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);
似乎工作正常,但将输入更改为:

Map<String, Map<String, Object>> input = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
这两个语句本质上不是在做相同的事情吗?

A
Map
不是
Map
的子类型,即使
Map
对象的子类型

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


如果允许您这样做,则该方法可能会将字符串、整数或香蕉存储到映射中,从而破坏映射的类型安全性,该映射应该只包含
map

的实例。或者,您可以使function方法如下所示:

public static String FunctionA(Map<String, ? extends Object> filters) throws Throwable{
//logic goes here
}
公共静态字符串函数(映射过滤器)抛出可丢弃的{
//逻辑就在这里
}
这样做会很开心的

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

不允许我以相同的方式调用函数,请详细说明,为什么我不能用一个实现LinkedHashMap的映射进行嵌套映射?
Map
Map
不是一回事。这就是你要问的吗?有一个红色的错误弹出,说两者都是不兼容的类型。当我将嵌套映射更改为LinkedHashMap时,为什么不显示错误,而将其作为innerMap单独执行?
public static String FunctionA(Map<String, ? extends Object> filters) throws Throwable{
//logic goes here
}
FunctionA(new HashMap<String, LinkedHashMap<String, Object>>());