参数化HashMaps:编译时错误:不兼容的类型

时间:2017-03-23 06:39:39

标签: java hashmap

public Class Test{


    HashMap<String, HashMap<String, String>> GlobalMap = new HashMap();
    private String X;



    public static void main(String[] args){
        Test t1 = new Test();
        t1.read(someTreeObject);
        }


@Override
    public Void method1(someCtx) {
        String A = "some value";
        String B = "some other value";

        Map Map1 = new HashMap();
        Map1.put(A,B);

        System.out.println("Local Map : "+Map1.entrySet);

        GlobalMap.put(X, (HashMap<String, String>)GlobalMap.get(X).putAll(Map1));  //<<<Compile time error details with the indicator pointing at Map1 within this line:  error: incompatible types: void cannot be converted to HashMap<String,String>

        // GlobalMap.put(X, (HashMap<String, String>)GlobalMap.get(X).put(new HashMap(A,B)));  //<<<<<<<<<This is another approach, when tried gives a compile time error with the indicator pointing at A within this line:  error: incompatible types: String cannot be converted to int

        System.out.println("Global Map Details : \n"+GlobalMap.entrySet()+"\n");       

    }
    return super.SomeMethod(someCtx);

}

Method1是一种最初可用于抽象接口的重写方法。 我知道我没有希望发送到主方法。

为什么putAll和put方法会产生不同的错误消息? 我真的在这里失踪了什么?

我是编程和Java的新手,并且正在努力学习构建高级HashMaps。在我的经验之前使用泛型HashMap构造时,我没有遇到类似于此错误的任何内容。

2 个答案:

答案 0 :(得分:0)

您的错误与putAll HashMap方法返回任何内容(无效)的事实有关,因为它只是将地图中的所有映射都复制到另一个映射。 查看更多here。 您可以在外部提取它,然后将地图与复制的元素放在一起。

((HashMap<String, String>)GlobalMap.get(X)).putAll(Map1);
GlobalMap.put(X, (HashMap<String, String>) Map1);

答案 1 :(得分:0)

方法HM2.putAll(HM1)将所有映射从HM1复制到HM2。它不会返回任何东西。所以,在你想要演员之前可能会这样做。

然而,不确定你在代码中想要实现什么 - 通过放置一个get(X)而不将任何东西放入全局映射中,这会在你运行putAll()时导致nullpointer。