Бокс с Arrays.asList () - PullRequest
       21

Бокс с Arrays.asList ()

7 голосов
/ 05 декабря 2011

В следующих примерах:

class ZiggyTest2{
    public static void main(String[] args){

        int[] a = { 1, 2, 3, 4,7};      

        List<Integer> li2 = new ArrayList<Integer>();
        li2 = Arrays.asList(a);     

    }
}   

Компилятор жалуется, что int [] и java.lang.Integer не совместимы.то есть

found   : java.util.List<int[]>
required: java.util.List<java.lang.Integer>
                li2 = Arrays.asList(a);
                               ^

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

List li2 = new ArrayList();
  • Разве компилятор не должен автоматически упаковывать целые числа в Integer?
  • Как создать объект List<Integer> из массива целых чисел с помощью Arrays.asList ()?

Спасибо

Ответы [ 2 ]

6 голосов
/ 05 декабря 2011

Java не поддерживает автоматическую упаковку всего массива примитивов в соответствующие им классы-обертки. Решение состоит в том, чтобы сделать ваш массив типа Integer[]. В этом случае каждый int помещается в Integer индивидуально.

int[] a = { 1, 2, 3, 4, 7 };
List<Integer> li2 = new ArrayList<Integer>();
for (int i : a) {
    li2.add(i); // auto-boxing happens here
}
5 голосов
/ 05 декабря 2011

Удаление шаблонов заставляет его компилироваться, но не работает.Ваш список будет содержать один элемент, который является int[].Вам придется самостоятельно перебирать массив и вставлять каждый элемент в List вручную

...