#java #arrays #multidimensional-array #declaration #indices
#java #массивы
Вопрос:
Например, мы можем построить такой массив следующим образом:
new ElementType[0];
Я видел такую конструкцию, но я не понимаю, почему это может быть полезно.
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос, чтобы уточнить.
Ответ №1:
Пример. Допустим, у вас есть функция
public String[] getFileNames(String criteria) {
чтобы получить некоторые имена файлов. Представьте, что вы не нашли ни одного имени файла, удовлетворяющего критериям. Что вы возвращаете? У вас есть 2 варианта — либо возвращать значение null, либо массив размером 0.
Вариант с массивом размером 0 лучше, потому что вашему вызывающему не нужно проверять наличие NULL и он может обрабатывать массив согласованным образом — скажем, в цикле (который в этом случае был бы пустым).
Об этом есть глава в Effective Java, пункт 27
Комментарии:
1. Чтобы быть уверенным: если код предназначен для использования на «нижних уровнях»,
null
он намного более производителен. Также см. 3-й абзац code.google.com/p/guava-libraries/wiki /…
Ответ №2:
С ним легче работать, чем null
во многих случаях, где null
есть очевидная альтернатива.
Предположим, вы хотите вернуть Iterable<String>
файл, содержащий (скажем) список соответствующих имен файлов… но по какой-то причине их нет. Вы могли бы вернуться null
, чтобы указать это, но тогда вызывающий должен использовать особый случай. Вместо этого, если вы возвращаете пустую коллекцию, вызывающий объект все равно может использовать расширенный цикл for:
for (String file : getFiles())
Итак, зачем использовать пустой массив вместо пустого ArrayList
или чего-то подобного? Массивы имеют фиксированный размер, поэтому пустой массив фактически неизменяем. Это означает, что вы можете сохранить единственное значение и вернуть его кому угодно, зная, что они ничего не смогут с ним сделать. Это может быть очень полезно в некоторых ситуациях.
Ответ №3:
это замена null, поскольку вам не нужно проверять наличие null перед его использованием. Более формально это частный случай шаблона проектирования специального случая (проверьте также нулевой объект).
Другое идиоматическое использование — collections toArray:
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);
Комментарии:
1. Обратите внимание, что во втором случае any
String[]
будет работать так же хорошо; ему просто нужен экземпляр типа, в который вы хотите его преобразовать.