[英]how to cast hashmap.values().toArray() where such values() are also hashmaps?
我希望這個主題很明確,建議值得贊賞。
我有一個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())
轉換將在運行時導致異常: function((HashMap<String,Test>[])hhm.values().toArray())
現在怎么辦?
我了解您要實現的目標。 但是您的意圖不適用於Java。
使用泛型的集合。 泛型的目的是在編譯時實現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));
}
}
}
如果您無法更改function
,請使用hacky解決方案,否則建議不要這樣做:
function(hhm.values().toArray((HashMap<String,Test>[]) new HashMap<?,?>[0]))
由於創建HashMap<?,?>[]
是合法的,然后可以將其HashMap<Whatever, Whatever>[]
,因為HashMap<Whatever, Whatever>[]
HashMap[]
在運行時實際上只是HashMap[]
(如果不是,則不會首先出現new HashMap<String,Test>[0]
問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.