Java:将对象转换为 HashMap<String, Object>

问题描述 投票:0回答:3

我正在尝试以一种简洁、健壮的方式将对象转换为 HashMap。到目前为止,我尝试的每种方法都会产生编译器警告或错误。正确的做法是什么?我查了互联网并尝试了以下方法:

HashMap<String, Object> map = (HashMap<String, Object>) object;
上面的代码给出了未经检查的转换警告。

HashMap<String, Object> map = new HashMap<>(); if (object instanceof Map<String, Object>){ map = (Map<String, Object>) object; }
上面的代码给出了一个错误,表示对象无法与参数化集合进行比较。

HashMap<String, Object> map = new HashMap<>(); if (object instanceof Map){ Map genericMap = (Map) object; for (Object key : genericMap.keySet()){ if (key instanceof String){ map.put((String) key, genericMap.get(key)); } else{ throw new KeyException(); } } }
上面的代码产生一个警告:“Map 是原始类型。对泛型类型 Map

的引用应该参数化。”

那么正确的方法是什么?预先感谢您!

java casting
3个回答
5
投票
我正在尝试以一种简洁、健壮的方式将对象转换为 HashMap。到目前为止,我尝试的每种方法都会产生编译器警告或错误。正确的做法是什么?

没有正确的方法来做到这一点,假设“正确”意味着有用且类型安全。类型转换是类型安全的对立面。除了用于算术目的的强制转换之外,安全强制转换是不必要的。

没有足够的信息来确定如何实现您最终想要的目标,但一般来说,这类事情围绕着编写真正的泛型代码而不是使用类型

Object

将不相关类型的对象集中到相同的方法中,使用

instanceof
确定您实际拥有的或铸造的。
    


0
投票
@SuppressWarnings("unchecked")

添加到您的方法中

@SuppressWarnings("unchecked")
public void myMethod(){
    ...
}

你应该能够使用

HashMap<String, Object> map = (HashMap<String, Object>) object;



0
投票

HashMap<String, Object> map = new HashMap<>(); if (object instanceof Map){ Map<?, ?> genericMap = (Map<?,?>) object; for (Object key : genericMap.keySet()){ if (key instanceof String){ map.put((String) key, genericMap.get(key)); } else{ throw new KeyException(); } } }

© www.soinside.com 2019 - 2024. All rights reserved.