2010-11-02 37 views
3

我在將對象數組轉換爲鍵值對數組時出現問題, 使用鍵和值對象的泛型類型。這是一個簡單的例子。Java實例化新的Map.Entry數組

public class Main { 
    public static void main(String[] args) { 
     array = (Map.Entry<Integer, Integer>[]) new Object[1]; 
    } 

    private static Map.Entry<Integer, Integer>[] array; 
} 

將Map.Entry更改爲一個類(而不是接口)也無法做到這一點。

錯誤跟蹤:

run: 
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.util.Map$Entry; 
     at lab2.Main.main(Main.java:13) 
Java Result: 1 
+0

爲什麼你會認爲'new Object [1]'與Map.Entry []'類型兼容?當然*一個新的vanilla Object []'數組不能轉換爲更具體的東西。同樣,這也不合法:'(String)new Object();'。 – 2010-11-02 16:51:38

回答

2

你需要有一個數組嗎?你可以做一個List如下:

public static void main(String[] args) { 
    array = new ArrayList<Map.Entry<Integer, Integer>>(); 
} 

private static List<Map.Entry<Integer, Integer>> array; 

或者,你可以實例化非泛型類型,和轉換爲通用類型:

public static void main(String[] args) { 
    array = (Map.Entry<Integer, Integer>[])new Map.Entry[1]; 
} 

private static Map.Entry<Integer, Integer>[] array; 

然而,這會給你警告,並一般不優選。

+0

謝謝! 最後一行確實有效。 :) – user494994 2010-11-02 17:06:38

+0

@user,如果我的解決方案解決了您的問題,請考慮將其標記爲接受的答案。 – jjnguy 2010-11-02 17:10:06

0

你不能施放一個ObjectMap。你想做什麼?

+0

這是一個Map.Entry,我錯過了什麼? – user494994 2010-11-02 16:50:55

+0

array = new Map.Entry [1];是你在找什麼。只有該對象真的屬於這種類型,才能投射到任何類型。在這種情況下,您正試圖將簡單的對象轉換爲不是超類的對象。 – 2010-11-02 16:52:44

+0

這會產生錯誤:「通用陣列創建」 我知道類型轉換不安全。但是我不能動態地投射它嗎? (這不常見嗎?) – user494994 2010-11-02 16:55:10