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

ian*_*ian 0 java casting

我正在尝试以一种简洁、健壮的方式将对象转换为 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> 的引用应该参数化。”

那么执行此操作的正确方法是什么?先感谢您!

Joh*_*ger 5

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

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

没有足够的信息来确定如何实现您最终想要的目标,但一般来说,这类事情围绕着编写真正的泛型代码而不是使用类型Object将不相关类型的对象集中到相同的方法中,使用instanceof来确定您要做什么其实有,还是铸造。