【问题标题】:Nested HashMaps and Declaration嵌套 HashMap 和声明
【发布时间】:2014-08-07 23:47:09
【问题描述】:

我正在尝试使用Maps,但我有这个疑问:

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 实现一个 LinkedHashMap 的嵌套 Map?
  • Map&lt;String, Object&gt;Map&lt;String, Map&lt;String, Object&gt;&gt; 不是一回事。你问的是这个吗?
  • 出现一个红色错误,提示两者的类型不兼容。为什么当我将它更改为嵌套 Map 的 LinkedHashMap 时它会有所不同,但在我作为 innerMap 单独执行时没有显示错误?

标签: java map nested linkedhashmap


【解决方案1】:

或者,您可以像这样创建 FunctionA 方法:

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

这样做会很开心!

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

【讨论】:

    【解决方案2】:

    Map&lt;String, Map&lt;String, Object&gt;&gt; 不是Map&lt;String, Object&gt; 的子类型,尽管Map&lt;String, Object&gt;Object 的子类型。

    确实,你可以在后者中存储你想要的任何对象,而你只能在前者中存储Map&lt;String, Object&gt; 实例。这就是为什么编译器不允许您将 Map&lt;String, Map&lt;String, Object&gt;&gt; 传递给以 Map&lt;String, Object&gt; 作为参数的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 2019-03-27
      • 2020-02-28
      • 2022-11-04
      • 2021-03-14
      • 2020-11-07
      • 2021-02-07
      • 1970-01-01
      相关资源
      最近更新 更多