2011-02-01 4 views
1
// how to convert this 
Integer[] array = {1, 2}; 

// to this 
int[] array = {1, 2}; 

Я работаю над кодом, который имеет вторую форму, и мне нужно изменить способ чтения массива. Не зная достаточно Java, я бы скорее просто конвертировал, чем ошибки риска.Как преобразовать целое число [] в int []?

+0

Возможный дубликат [Преобразование массива объектов в массив их примитивных типов.] (Http://stackoverflow.com/questions/564392/converting-a-array-of-objects-to-an-of-of-their-primitive-types) – finnw

ответ

10

Вы можете использовать commons-langArrayUtils.toPrimitive(array)

Если вы по каким-то причинам не хотите включать Викисклад Ланг, вот код этого метода. Но это лучший вариант просто включить зависимость - у нее есть много дополнительных функций, которые вам в конечном итоге понадобятся.

public static final int[] EMPTY_INT_ARRAY = new int[0]; 

public static int[] toPrimitive(Integer[] array) { 
    if (array == null) { 
     return null; 
    } 
    if (array.length == 0) { 
     return EMPTY_INT_ARRAY; 
    } 
    int[] result = new int[array.length]; 
    for (int i = 0; i < array.length; ++i) { 
     result[i] = array[i].intValue(); 
    } 
    return result; 
} 
+1

+1, хотя я бы рекомендовал просто использовать commons-lang, а не использовать описанный здесь метод (особенно если проект все еще растет.) Я всегда использовал для копирования такой код, а не для использования commons-lang, но по мере роста кодовой базы я неизбежно копировал другие методы, пока не смог включить его с самого начала. Если вы обнаружите, что вам нужно удалить зависимость позже, и она использует только этот метод, это будет не слишком сложно, но я бы посоветовал просто оставить его. Многие проекты зависят от сообщества, и по уважительной причине ! – berry120

+0

@ berry120 - действительно, я вполне согласен с тем, что я имею в виду commons-lang (или guava). Я еще раз остановлюсь на этом. – Bozho

+0

Если это фактический код в commons-lang, разве вы не должны ссылаться на лицензию на использование авторских прав? – Ishtar

2

Я не уверен, какие ошибки вы ожидаете, между ними очень мало различий. Один из способов преобразования является:

Integer[] array = {1, 2}; 

int[] array2 = new int[array.length]; 

for (int i = 0; i < array.length; i++) { 
    array2[i] = array[i]; 
} 
+0

Наиболее распространенным источником ошибок с короткими значениями, вероятно, является то, что они могут быть нулевыми, а примитивы не могут. Это может привести к NullPointerExceptions в неожиданных местах. –

2

Ints.toArray(Collection<Integer> col) из google-guava. Если вы не хотите использовать внешнюю зависимость, я думаю, вам нужно перевернуть свой собственный

+0

hm, это берет коллекцию, и ему нужен массив – Bozho

+2

'Ints.toArray (массив Arrayys.asList (массив Integer [])', который будет полным. –

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