我希望主题明确,建议表示赞赏。
我有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())
现在怎么办?
答案 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]
没有问题。)