2010-01-06 52 views
5

我嘗試將對象數組強制轉換爲長陣列時出現此異常。將對象數組強制轉換爲長陣列時發生ClassCastException

異常在線程 「主」 java.lang.ClassCastException: [Ljava.lang.Object;不能投到 [Ljava.lang.Long;

我在我的hotelRooms地圖中的鑰匙很長,爲什麼它不可能施放。有人知道如何解決這個問題嗎?

public class ObjectArrayToLongArrayTest { 

private Map<Long, String[]> hotelRooms; 

public static void main(String[] args) { 

    ObjectArrayToLongArrayTest objectArrayToLongArrayTest = 
     new ObjectArrayToLongArrayTest(); 
    objectArrayToLongArrayTest.start(); 
    objectArrayToLongArrayTest.findByCriteria(null); 

} 

private void start() { 
    hotelRooms = new HashMap<Long, String[]>(); 
    // TODO insert here some test data. 

    hotelRooms.put(new Long(1), new String[] { 
      "best resort", "rotterdam", "2", "y", "129", "12-12-2008", 
      "11111111" 
    }); 

    hotelRooms.put(new Long(2), new String[] { 
      "hilton", "amsterdam", "4", "n", "350", "12-12-2009", "2222222" 
    }); 

    hotelRooms.put(new Long(3), new String[] { 
      "golden tulip", "amsterdam", "2", "n", "120", "12-09-2009", 
      null 
    }); 
} 

public long[] findByCriteria(String[] criteria) { 

    Long[] returnValues; 

    System.out.println("key of the hotelRoom Map" + hotelRooms.keySet()); 
    if (criteria == null) { 
     returnValues = (Long[]) hotelRooms.keySet().toArray(); 
    } 

    return null; 
} 
} 
+0

即使這個問題是關於Java而不是C++,我覺得這個討論很有用:http://www.parashift.com/c++-faq-lite/proper-inheritance.html#faq-21.4 – Jherico 2010-01-07 20:59:19

回答

24

變化

returnValues = (Long[]) hotelRooms.keySet().toArray(); 

returnValues = hotelRooms.keySet().toArray(new Long[hotelRooms.size()]); 

,讓我知道,如果它:-)

+4

+1 *讓我知道它是否有效* .. – OscarRyz 2010-01-06 22:16:37

+0

謝謝,它的工作原理。在Interface Set 的java api中。我看到這兩種方法(1)Object [] toArray()和 (2) T [] toArray(T [] a)。爲什麼第一種方法不起作用。 – loudiyimo 2010-01-06 22:23:06

+0

第一個工作正常,但它返回一個通用對象數組,這不是你想要的! – moritz 2010-01-06 22:28:30

7

這是因爲Object[] Set.toArray()返回一個對象數組。您不能將陣列向下轉換爲更具體的類型。改爲使用<T> T[]Set.toArray(T[] a)。如果泛型類型方法不存在,則必須遍歷返回對象數組中的每個對象,然後逐個將其分別轉換爲新的Long數組。

+0

您爲我節省了很多麻煩:在發現這顆寶石之前,我必須通過不正確的答案進行大量搜索。謝謝! – 2010-07-13 10:42:27

+0

很高興有幫助=) – 2010-07-15 03:16:30

相關問題