我正在尝试以一种简洁、健壮的方式将对象转换为 HashMap<String, Object>。到目前为止,我尝试的每种方法都会产生编译器警告或错误。正确的做法是什么?我检查了互联网并尝试了以下方法:
HashMap<String, Object> map = (HashMap<String, Object>) object;
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了未经检查的转换警告。
HashMap<String, Object> map = new HashMap<>();
if (object instanceof Map<String, Object>){
map = (Map<String, Object>) object;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了一个错误,表明对象无法与参数化集合进行比较。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生一个警告:“Map 是原始类型。对泛型类型 Map<K,V> 的引用应该参数化。”
那么执行此操作的正确方法是什么?先感谢您!
我正在尝试以一种简洁、健壮的方式将对象转换为 HashMap<String, Object>。到目前为止,我尝试的每种方法都会产生编译器警告或错误。正确的做法是什么?
没有正确的方法可以做到这一点,假设“正确”意味着有用且类型安全。类型转换是类型安全的对立面。除了用于算术目的的强制转换之外,安全强制转换是不必要的。
没有足够的信息来确定如何实现您最终想要的目标,但一般来说,这类事情围绕着编写真正的泛型代码而不是使用类型Object
将不相关类型的对象集中到相同的方法中,使用instanceof
来确定您要做什么其实有,还是铸造。