Использование массива нулевой длины

Я часто создаю функции для редактирования задач и сохраняю их в своем .vimrc, чтобы найти их снова. Например, чтение стека вызовов .Net, которые были преобразованы в одну строку:

function! FixCallStacks()
:%s;\[NLN\];\r;g
:%s;\[TAB\];\t;g
endfunction
27
задан Lii 31 January 2016 в 22:35
поделиться

3 ответа

Пример. Скажем, у вас есть функция

public String[] getFileNames(String criteria) {

для получения имен файлов. Представьте, что вы не нашли ни одного имени файла, удовлетворяющего критериям. Что ты вернешь? У вас есть 2 варианта: либо вернуть null , либо массив нулевого размера .

Вариант с массивом нулевого размера лучше, потому что вызывающему абоненту не нужно проверять NULL и он может обрабатывать массив согласованным образом - скажем, в цикл (который в данном случае будет пустым).

Об этом есть глава в Эффективная Java, элемент 27

44
ответ дан 28 November 2019 в 04:43
поделиться

Во многих случаях легче работать, чем null , где очевидной альтернативой является null .

Предположим, вы хотите вернуть Iterable , содержащий (скажем) список соответствующих имён файлов ... но по какой-то причине их нет. Вы можете вернуть null , чтобы указать это, но тогда вызывающий должен сделать это в особом случае. Вместо этого, если вы вернете пустую коллекцию, вызывающий может по-прежнему использовать расширенный цикл for:

for (String file : getFiles())

Так зачем использовать пустой массив вместо пустого ArrayList или чего-то подобного? Массивы имеют фиксированный размер, поэтому пустой массив фактически неизменяем. Это означает, что вы можете оставить одно значение и вернуть его кому угодно, зная, что они не могут ничего с этим поделать.

15
ответ дан 28 November 2019 в 04:43
поделиться

это замена null, поскольку вам не нужно проверять значение null перед его использованием. Более формально это частный случай шаблона проектирования особого случая (проверьте также Null Object).

Еще одно идиоматическое использование - это коллекции toArray :

List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]); 
4
ответ дан 28 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: