Что здесь не так? Я получаю ошибку java.lang.ClassCastException, но не могу понять, где я ошибся

Я впервые использую списки и очереди, поэтому это может быть очень простой ошибкой. Это потому, что моя очередь полна объектов, которые нельзя преобразовать в целые числа?

           //populate array
        for(int i=0; i<11; i++){
            numberarray[i] = i; 
        }
        // populate list with numbers from array
        List numList = Arrays.asList(numberarray);
        Collections.shuffle(numList);

        Queue queue = new LinkedList();
        queue.addAll(numList);

        int num1 = (Integer) queue.poll();
        assignPictures(button01, num1);
 Jeffrey20 мая 2012 г., 20:55
Я имею в видуList<Integer>, Примитивы нельзя использовать в качестве параметров типа
 Connor Atherton20 мая 2012 г., 20:58
Спасибо. Я пытался использовать List & lt; int & gt; вместо списка & lt; Integer & gt ;.
 Connor Atherton20 мая 2012 г., 20:54
java.util.Arrays $ ArrayList нельзя преобразовать в java.lang.Integer ... под обобщениями вы подразумеваете List & lt; int & gt ;?
 Jeffrey20 мая 2012 г., 20:52
ЧтоClassCastException ты получаешь? Почему вы не используете дженерики для обеспечения безопасности типов?

Ответы на вопрос(2)

Я думаю, что проблема здесь:

Arrays.asList(numberarray);

Еслиnumberarray являетсяint[] а неInteger[]то этот вызов на самом деле вернетList изint[]содержащие этот массив как один элемент.

ClassCastException случается позже, когда вы пытаетесь разыгратьint[] возражать противInteger.

Поскольку Java не поддерживает примитивные коллекции, простого способа использования не существуетArrays.asList обернуть примитивный массив - автобокс не работаетen masse как это. Лучше всего начать с использованияInteger[] если вы планируете использовать его для поддержкиCollection.

Часть путаницы проистекает из того факта, что методasList(T...) принимаетпеременные аргументы, Если это просто занялоT[] вместо этого компилятор не позволит вам передатьint[] поскольку примитивные массивы не расширяютсяObject[], Но с поддержкой varargs компилятор выводитT какint[] и думает, что вы хотите построитьList поддерживается одним элементомint[][].

Как уже отмечалось, использованиедженерики действительно поможет вам с такими неопределенностями, и всегда полезно программировать, используя их:

List<Integer> numList = Arrays.asList(numberarray);

Эта строка выдает следующую ошибку компиляции, вместо того, чтобы позволить вашему коду сбоить во время выполнения:

incompatible types
required: java.util.List<java.lang.Integer>
found: java.util.List<int[]>

Side note: Предполагая, что вы переходите к использованиюInteger[] не забывайте, что это означает, что элементы теперь могут бытьnull, Если это такNullPointerException будет сброшен при распаковке обратноint - просто будьте осторожны, чтобы убедиться, что ваша реализация не позволяетnull элементы или еще проверитьnull перед распаковкой

 20 мая 2012 г., 21:34
@ConnorAtherton - Рад, что смог помочь!
 Connor Atherton20 мая 2012 г., 21:08
Спасибо за примечание. Я думаю, что после тестирования на моем устройстве Android несколько раз и просмотра моего кода моя реализация не позволяет использовать нулевой элемент в конце очереди. Спасибо, этот пост действительно помог мне!
 Connor Atherton20 мая 2012 г., 20:58
вы были правы .. я запустил его снова и получил .. int [] не может быть приведен к java.lang.Integer
Решение Вопроса

ue, если только это действительно не критично для производительности и вы не используете много атомарных типов, таких как int. Тогда вы должны взглянуть на http://labs.carrotsearch.com/hppc.html

Ваш ответ на вопрос