gpt4 book ai didi

java - 如果 Object instanceof HashMap 如何检查键和值的类型?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:06 25 4
gpt4 key购买 nike

我有一个接受对象的方法。在一个用例中,该方法接受 HashMap<String, String>并将每个值设置为相应键名的属性。

public void addHelper(Object object) {
if (object instanceof HashMap) {
HashMap<String, String> hashMap = (HashMap<String, String>) object;
this.foo = hashMap.get("foo");
this.bar = hashMap.get("bar");
}
}

此类遵循特定接口(interface),因此不能为这些属性添加 setter。

我的问题是,如何检查此处的类型转换?

HashMap<String, String> hashMap = (HashMap<String, String>) object;

提前致谢!

解决方案

感谢@drobert 的回答,这是我更新后的代码:

public void addHelper(Object object) {
if (object instanceof Map) {
Map map = (Map) object;
if (map.containsKey("foo")) this.foo = map.get("foo").toString();
if (map.containsKey("bar")) this.bar = map.get("bar").toString();
}
}

最佳答案

你不能。由于类型删除,反射将显示你有一个 HashMap 实例,但类型在运行时被删除。实际上,您有 HashMap< Object,Object >。

也就是说,您仍然有一些选择,并且我建议您采纳一些建议。其中:

  • 检查它是否是“Map”而不是“HashMap”的实例。它将使您的 API 更加灵活,因为您很可能只关心通过 key 快速访问而不是任何特定的实现
  • 利用定义“containsKey(Object)”和“get(Object)”的 java.util.Map 的 api,因此您仍然可以安全地使用 mapInst.get("stringKey"),甚至无需转换。
  • 您无法确保所有值都是字符串,但您可以利用 java.lang.Object 的 toString() 方法并为每个值获取一个字符串。

简而言之:像对待任何 Map 一样对待它,并尝试将键作为字符串访问,即使没有强制转换,并尝试通过执行空检查然后调用 .toString() 将每个值用作字符串,您将拥有更安全的实现。

关于java - 如果 Object instanceof HashMap 如何检查键和值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19163453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com