2010-01-06 2 views
5

Я получаю это исключение, когда пытаюсь применить массив Object к длинному массиву.ClassCastException при отбрасывании объекта Array to Long array

Исключение в потоке "основного" java.lang.ClassCastException: [Ljava.lang.Object; не может быть отлита до [Ljava.lang.Long;

Мои ключи в моем отелеРасширенная карта Long, почему это невозможно. Кто-нибудь знает, как это решить.

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

ответ

24

изменение

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

в

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

и дайте мне знать, если он работает :-)

+4

+1 для * дайте мне знать, если он работает * .. – OscarRyz

+0

спасибо, он работает. В java api набора интерфейсов . Я вижу эти два метода (1) Object [] toArray() и (2) T [] toArray (T [] a). Почему первый метод не работает. – loudiyimo

+0

первый работает просто отлично, но он возвращает массив общих объектов, что не то, что вы хотите! – moritz

7

Это потому, что Object[] Set.toArray() возвращает массив объектов. Вы не можете преобразовать массив в более конкретный тип. Вместо этого используйте <T> T[]Set.toArray(T[] a). Если метод generic type не существовал, вам придется перебирать каждый из объектов в массиве возвращаемых объектов и каждый отдельно вводить их в новый длинный массив.

+0

Ты спас мне много неприятностей: мне пришлось много раз искать неправильные ответы, прежде чем я нашел этот камень. Спасибо! –

+0

Рад быть полезным =) –