Например, мы можем построить такой массив следующим образом:
new ElementType[0];
Я видел такую конструкцию, но я не понимаю, почему это может быть полезно.
Например, мы можем построить такой массив следующим образом:
new ElementType[0];
Я видел такую конструкцию, но я не понимаю, почему это может быть полезно.
Пример. Скажем, у вас есть функция
public String[] getFileNames(String criteria) {
чтобы получить некоторые имена файлов. Представьте, что вы не найдете ни одного файла, удовлетворяющего критериям. Что вы возвращаете? У вас есть 2 варианта: либо вернуть значение null, либо массив 0-размера.
Вариант с размером массива 0 лучше, потому что ваш вызывающий объект не должен проверять NULL и может обрабатывать массив согласованным образом - скажем, в цикле (который был бы пусто в этом случае).
Там есть глава об этом в Эффективная Java, пункт 27
В большинстве случаев легче работать с null
, где null
является очевидной альтернативой.
Предположим, вы хотите вернуть Iterable<String>
содержащий (скажем) список соответствующих имен файлов... но по какой-то причине их нет. Вы можете вернуть null
, чтобы указать это, но тогда вызывающий абонент должен иметь специальный случай. Вместо этого, если вы вернете пустую коллекцию, вызывающий может по-прежнему использовать расширенный цикл for:
for (String file : getFiles())
Итак, зачем использовать пустой массив вместо пустого ArrayList
или что-то подобное? Массивы представляют собой фиксированный размер, поэтому пустой массив является фактически неизменным. Это означает, что вы можете сохранить единственное значение и вернуть его кому угодно, зная, что они ничего не могут с этим поделать. Это может быть очень полезно в некоторых ситуациях.
это замена null, поскольку вам не нужно проверять значение null перед ее использованием. Более формально это частный случай специальный шаблон дизайна корпуса (также проверьте нулевой объект).
Другим идиоматическим использованием являются коллекции toArray:
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);