2013-08-10 2 views
1

Я пытаюсь добавить массив целых чисел к ArrayList следующим образом, который не работает:Невозможно добавить ИНТ [] типа к ArrayList

ArrayList<int[]> myAL = new ArrayList<int[]>(); 

myAL.add({2,3}); 

однако, добавив его справочники:

ArrayList<int[]> myAL = new ArrayList<int[]>(); 

int[] id = {2,3}; 
myAL.add(id); 

Я считаю, что вы можете добавить простые целые числа в ArrayList без ссылки, так как вы не можете добавить массив без ссылки.

Спасибо,

+2

{2,3} Это не означает анонимный объект, чтобы сделать его вам нужно myAl.add (new int [] {2,3}); –

+0

Я думаю, что вы можете добавить массив Int в ArrayList, а не его значения – mmratxs

+0

Этот вопрос не имеет ничего общего с 'ArrayList', это просто синтаксическая ошибка. – EJP

ответ

2

Вы всегда должны использовать anonymous array syntax при объявлении целочисленного массива вне объявления массива. Этот синтаксис описан в спецификации языка Java под Array Creation Expressions и показывает, что new используется ключевое слово

ArrayCreationExpression: 
    new PrimitiveType DimExprs Dimsopt 
    new ClassOrInterfaceType DimExprs Dimsopt 
    new PrimitiveType Dims ArrayInitializer 
    new ClassOrInterfaceType Dims ArrayInitializer 

Вот почему

int[] id = {2,3}; // declaration 

является допустимым синтаксисом, в то время как

int[] id; 
id = {2,3}; // assignment - outside declaration - fails compilation 

нет. Поэтому необходимо использовать

myAL.add(new int[]{2,3}); 
0

Ваш {2, 3} является примером ArrayInitializer. В соответствии с JLS:

10.6. Array Initializers

«Инициализатор массив может быть указано в декларации (§8.3, §9.3, §14.4), или как часть выражения создания массива (§15.10), чтобы создать массив и предоставить некоторые начальные значения ».

Первые три случая предназначены для объявления переменных, и это не то, что вы делаете. Окончательный случай соответствует тому, что вы пытаетесь сделать ... создать экземпляр массива ... но если вы посмотрите на связанный раздел, вы увидите, что для этого вам нужно использовать ключевое слово Java new.


Так почему же синтаксис Java не позволяет сделать это (myAL.add({2,3});)?

Ну, я думаю, что основной причиной является то, что {2, 3} недостаточно, чтобы сказать, какой тип массива должен быть создан ... во всех таких контекстах.

Рассмотрим это:

ArrayList myAL = new ArrayList(); 

    myAL.add({2,3}); 

Какой массив уместен здесь? Должно ли это быть int[]? Или long[]? Или Integer[]? Или Object[]?

Другая вещь, которую следует помнить, это то, что инициализаторы массива были частью языка Java в Java 1.0 ...задолго до того, как язык Java включал в себя общие типы и ограниченное определение типов, которые могли (гипотетически) разрешить проблему двусмысленности решаемым разумным образом.

Смежные вопросы