Например, мы можем построить такой массив как это:Использование массива нулевой длины
new ElementType[0];
Я видел такую конструкцию, но я не понимаю, почему это может быть полезно.
Например, мы можем построить такой массив как это:Использование массива нулевой длины
new ElementType[0];
Я видел такую конструкцию, но я не понимаю, почему это может быть полезно.
Пример. Скажем, у вас есть функция
public String[] getFileNames(String criteria) {
, чтобы получить некоторые имена файлов. Представьте, что вы не найдете ни одного файла, удовлетворяющего критериям. Что вы возвращаете? У вас есть 2 варианта: либо возврат, либо 0-мерный массив.
Вариант с 0 размера массива лучше, потому что ваш абонент не нужно проверять NULL и может обрабатывать массив в единообразной форме - скажем, в цикле (который будет пустым в Это дело).
Там в главе об этом в Effective Java, Item 27
Чтобы убедиться: если код предназначен для использования в «нижних слоях», «нуль» является более эффективным. Также см. 3-й абзац https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained – Pacerier
С этим легче работать, чем null
во многих случаях, где null
- очевидная альтернатива.
Предположим, вы хотите вернуть Iterable<String>
, содержащий (скажем) список соответствующих имен файлов ... но по какой-либо причине их нет. Вы можете вернуть null
, чтобы указать это, но тогда вызывающий должен иметь специальный случай. Вместо этого, если вы возвращаете пустую коллекцию, абонент может еще использовать улучшенный цикл:
for (String file : getFiles())
Так зачем использовать пустой массив вместо пустого ArrayList
или что-то подобное? Массивы представляют собой фиксированный размер, поэтому пустой массив является фактически неизменным. Это означает, что вы можете сохранить единственное значение и вернуть его кому угодно, зная, что они ничего не могут с этим поделать. Это может быть очень полезно в некоторых ситуациях.
это замена нуль, так как вам не нужно, чтобы проверить нуль, прежде чем использовать его. Формально это особый случай special case design pattern (также проверьте нулевой объект).
Другого идиоматическое использование коллекции ToArray:
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);
Обратите внимание, что во втором случае любая 'String []' будет работать так же хорошо; ему просто нужен экземпляр типа, в который вы хотите его преобразовать. –
Пожалуйста, измените вопрос уточнения. – Nippysaurus