簡體   English   中英

如何鑄造hashmap.values()。toArray()哪里,這些values()也是哈希圖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM