Подтвердить что ты не робот

Возвращение пустого массива

Вопрос

Это может быть глупый вопрос, но есть ли разница между foo() и bar()?


CODE

private static File[] foo() {
    return Collections.emptyList().toArray(new File[0]);
}

private static File[] bar() {
    return new File[0];
}

Я пытаюсь найти лучший способ вернуть пустой массив, а не null.

4b9b3361

Ответ 1

Другой способ возврата пустого массива - использовать константу, так как все пустые массивы заданного типа одинаковы.

private static final File[] NO_FILES = {};
private static File[] bar(){
    return NO_FILES;
}

Ответ 2

Оба 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;
}

Ответ 3

Определенно второй. В первом вы используете константу empty List<?>, а затем преобразуете ее в File[], которая требует создания пустого массива File[0]. И это то, что вы делаете во втором за один шаг.

Ответ 4

Вы можете вернуть пустой массив двумя способами:

Если вы хотите вернуть массив int, тогда

  1. Использование {}:

    int arr[] = {};
    return arr;
    
  2. Используя new int[0]:

    int arr[] = new int[0];
    return arr;
    

Таким же образом вы можете вернуть массив и для других типов данных.

Ответ 5

Нет никакой разницы, кроме того, что foo выполняет 3 видимых вызова метода для возврата пустого массива, который в любом случае создается, тогда как bar() просто создает этот массив и возвращает его.

Ответ 6

Я уверен, вы должны пойти с bar(); потому что с помощью foo(); он создает список (ни за что), так как вы все равно создаете новый файл [0], поэтому почему бы не пойти с его прямым возвратом!

Ответ 7

В одной строке вы можете сделать:

private static File[] bar(){
    return new File[]{};
}

Ответ 8

return new File[0];

Это лучший и эффективный подход.