Эти два добавления не компилируются. Как это будет работать правильно?
Переведено автоматически
Ответ 1
Размер массива изменить нельзя. Если вам нужен массив большего размера, вам придется создать новый экземпляр.
Лучшим решением было бы использовать ArrayList который может увеличиваться по мере необходимости. Метод ArrayList.toArray( T[] a ) возвращает вам ваш массив, если он вам нужен в этой форме.
List<String> where = newArrayList<String>(); where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" ); where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
Если вам нужно преобразовать его в простой массив...
Но большинство вещей, которые вы делаете с массивом, вы можете делать и с этим ArrayList:
// iterate over the array for( String oneItem : where ) { ... }
// get specific items where.get( 1 );
Ответ 2
Используйте a List<String>, например an ArrayList<String> . В отличие от массивов, он может динамически расширяться (см.: Эффективное издание Java 2nd, пункт 25: Предпочтение списков массивам).
import java.util.*; //....
List<String> list = newArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); System.out.println(list); // prints "[1, 2, 3]"
Если вы настаиваете на использовании массивов, вы можете использовать java.util.Arrays.copyOf для выделения большего массива для размещения дополнительного элемента. Однако это действительно не лучшее решение.
Массив - это объект-контейнер, который содержит фиксированное количество значений одного типа. Длина массива устанавливается при создании массива. После создания его длина фиксируется.
// declare a new array with enough space for all elements String[] combinedArray = newString[array1.length + array2.length];
// copy the separate arrays into the combined array System.arraycopy(array1, 0, combinedArray, 0, array1.length); System.arraycopy(array2, 0, combinedArray, array1.length, array2.length);