ClassCastException при приведении объекта Array к массиву Long - PullRequest
5 голосов
/ 07 января 2010

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

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

Мои ключи на моей карте hotelRooms: 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;
}
}   

Ответы [ 2 ]

25 голосов
/ 07 января 2010

изменение

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

до

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

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

7 голосов
/ 07 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...