我正在尝试以一种简洁、健壮的方式将对象转换为 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 的引用应该参数化。”
我正在尝试以一种简洁、健壮的方式将对象转换为 HashMap。到目前为止,我尝试的每种方法都会产生编译器警告或错误。正确的做法是什么?没有正确的方法来做到这一点,假设“正确”意味着有用且类型安全。类型转换是类型安全的对立面。除了用于算术目的的强制转换之外,安全强制转换是不必要的。
没有足够的信息来确定如何实现您最终想要的目标,但一般来说,这类事情围绕着编写真正的泛型代码而不是使用类型
Object
将不相关类型的对象集中到相同的方法中,使用
instanceof
确定您实际拥有的或铸造的。@SuppressWarnings("unchecked")
添加到您的方法中
@SuppressWarnings("unchecked")
public void myMethod(){
...
}
你应该能够使用
HashMap<String, Object> map = (HashMap<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();
}
}
}