将原始地图转换为Map <Object,Object>,会有任何问题吗?

Adr*_*Lee 6 java

我需要将raw转换MapMap<string,string>,我想我必须首先将原始地图转换为Map<Object,Object>然后再将其转换为Map<String,String>.

代码片段如下所示.

    Map obj1 = new HashMap();
    obj1.put("key1", 1);
    obj1.put("key2", false);
    obj1.put("key3", 3.94f);


    Map<Object, Object> obj2 = obj1;

    Map<String, String> obj = new HashMap<String,String>();

    for (Map.Entry<Object, Object> entry: obj2.entrySet()) {
        obj.put(entry.getKey().toString(), entry.getValue().toString());
    }
Run Code Online (Sandbox Code Playgroud)

我想它可以在任何条件下工作,但我想听听其他人关于此代码可能存在的危险.(ClassCastException例如,任何可能性?)

如果您有更好的想法,也请告诉我.

- 修改后的代码

    Map obj1 = new HashMap();
    obj1.put(2, 1);
    obj1.put(true, false);
    obj1.put(4.4f, 3.94f);

    Map<String, String> obj = new HashMap<String,String>();
    for (Object k : obj1.keySet()){
        obj.put(k.toString(), obj1.get(k).toString());
    }
Run Code Online (Sandbox Code Playgroud)

由于原始Map条目将包含对象的键/值,我认为我不需要临时Map<Object,Object>.只是迭代每个项目效果很好,到目前为止我没有看到任何问题.

Vik*_*yap 1

如果您查看HashMap其中的定义jdk 1.4,它是早期在概念尚未出现Object时使用类实现的generics

generics引入后,object将替换为<T>. 但如果您仍然不使用Generics类型安全,则此语句在内部new HashMap()反映了<Object, Object>. 更好 直接使用 aanew HashMap()是更好的主意。应该没有必要Map <Object, Object> obj2

所以,为此......采取更好的方法。

Map obj1 = new HashMap();
  obj1.put("key1", 1);
  obj1.put("key2", false);
  obj1.put("key3", 3.94f);


Map<Object, Object> obj2 = obj1;

Map<String, String> obj = new HashMap<String,String>();

for (Object obj_Entry : obj1.entrySet()) {
    Map.Entry entry = (Map.Entry) obj_Entry; // This will Work Fine all Time. 
    obj.put(entry.getKey().toString(), entry.getValue().toString());

}
Run Code Online (Sandbox Code Playgroud)