Ответ 1
Другой способ возврата пустого массива - использовать константу, так как все пустые массивы заданного типа одинаковы.
private static final File[] NO_FILES = {};
private static File[] bar(){
return NO_FILES;
}
Это может быть глупый вопрос, но есть ли разница между foo()
и bar()
?
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
private static File[] bar() {
return new File[0];
}
Я пытаюсь найти лучший способ вернуть пустой массив, а не null
.
Другой способ возврата пустого массива - использовать константу, так как все пустые массивы заданного типа одинаковы.
private static final File[] NO_FILES = {};
private static File[] bar(){
return NO_FILES;
}
Оба foo()
и bar()
могут генерировать предупреждения в некоторых IDE. Например, IntelliJ IDEA создаст предупреждение Allocation of zero-length array
.
Альтернативный подход заключается в использовании функции Apache Commons Lang 3 ArrayUtils.toArray()
с пустыми аргументами:
public File[] bazz() {
return ArrayUtils.toArray();
}
Этот подход является одновременно производительностью и дружественной IDE, но требует зависимости от третьей стороны. Однако, если у вас уже есть commons-lang3 в вашем пути к классам, вы даже можете использовать статически заданные пустые массивы для примитивных типов:
public String[] bazz() {
return ArrayUtils.EMPTY_STRING_ARRAY;
}
Определенно второй. В первом вы используете константу empty List<?>
, а затем преобразуете ее в File[]
, которая требует создания пустого массива File[0]
. И это то, что вы делаете во втором за один шаг.
Вы можете вернуть пустой массив двумя способами:
Если вы хотите вернуть массив int
, тогда
Использование {}
:
int arr[] = {};
return arr;
Используя new int[0]
:
int arr[] = new int[0];
return arr;
Таким же образом вы можете вернуть массив и для других типов данных.
Нет никакой разницы, кроме того, что foo выполняет 3 видимых вызова метода для возврата пустого массива, который в любом случае создается, тогда как bar() просто создает этот массив и возвращает его.
Я уверен, вы должны пойти с bar();
потому что с помощью foo();
он создает список (ни за что), так как вы все равно создаете новый файл [0], поэтому почему бы не пойти с его прямым возвратом!
В одной строке вы можете сделать:
private static File[] bar(){
return new File[]{};
}
return new File[0];
Это лучший и эффективный подход.