【问题标题】:How can I get a value from Hashmap<String, Object>?如何从 Hashmap<String, Object> 获取值?
【发布时间】:2020-01-08 02:28:22
【问题描述】:

我需要一个可以包含任何类型值的 Map。所以我尝试使用HashMap。但是,如果我尝试从映射中获取值,IDE 会说类型不匹配。

这是我的代码的一部分:

Map<String, Object> state1 = new HashMap<>();
state1.put("location", exit1);
state1.put("direction", direction);
state1.put("number", 0);
Deque<Map> q = new ArrayDeque<>();
q.add(state1);
List<Integer> numbers = new ArrayList<>();

while (!q.isEmpty()) {
    Map<String, Object> state = q.poll();
    Pair location = state.get("location");

变量exit1direction已经在这部分之前定义好了,所以你可以忽略它。此外,您不必关心这部分下面的代码。

我的 IDE 说 Map&lt;String, Object&gt; state = q.poll(); 行的类型不兼容 — Pair 是必需的,但找到了 Object。我怎样才能使它兼容?

我正在解决一个只能运行一个文件的问题,因此我无法实现新类。

【问题讨论】:

  • Pair location = (Pair) state.get("location");?
  • 你有两个泛型问题:一个是你的Deque&lt;Map&gt; 应该是Deque&lt;Map&lt;String, Object&gt;&gt;;另一个在您的Map&lt;String, Object&gt; 中,除非您强制转换它们,否则编译器不会知道映射值的精确类型。

标签: java object types hashmap


【解决方案1】:
...
Pair location = null;
if(state.get("location") instanceof Pair){
  Pair location = (Pair)state.get("location");
}
else{
...
}

【讨论】:

  • 我会的!但我必须等到这样做。
【解决方案2】:

您可以像这样指定泛型类型:

Deque<Map<String, Object>> q = new ArrayDeque<>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2014-07-20
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多