如何构建hashmap.values()。toArray(),其中这些values()也是hashmaps?

时间:2017-06-02 03:27:13

标签: java casting hashmap

我希望主题明确,建议表示赞赏。

我有hhm=new HashMap<String,HashMap<String,Test>>()

我有function(HashMap<String,Test>... array)

我需要调用function(hhm.values().toArray(new HashMap<String,Test>[0])),但我找不到办法,这段代码不会编译。

转换会在运行时导致异常:function((HashMap<String,Test>[])hhm.values().toArray())

现在怎么办?

2 个答案:

答案 0 :(得分:1)

我承诺你要实施的目标。但是你的意图不适合Java。

使用Generic的集合。 Generic的目的是在编译时使用Type-Saftey。

Java数组不足,所以它在运行时强制类型。

您的意图是可以实施的。但是将varags参数更改为List会更安全,更方便实现您的目的。

List<Map<String, Test1>> list =new ArrayList<>();
for(String key : hhm.keySet()){
    list.add(hhm.get(key));
}
function(list);

public static void function(List<Map<String, Test1>> list){
    for(Map<String, Test1> map : list){
        for(String key : map.keySet()){
            System.out.println(key +" : "+map.get(key));
        }
    }
}

答案 1 :(得分:1)

Hacky解决方案,以防您无法更改function建议:

function(hhm.values().toArray((HashMap<String,Test>[]) new HashMap<?,?>[0]))

由于 合法创建HashMap<?,?>[],然后您可以投放它,因为HashMap<Whatever, Whatever>[]在运行时实际上只是HashMap[](如果它不是' t,首先new HashMap<String,Test>[0]没有问题。)