Як я можу ініціалізувати масив String довжиною 0 в Java?


133

Java Docs для методу
String[] java.io.File.list(FilenameFilter filter)
включає це в опис повернення:

Масив буде порожнім, якщо каталог порожній або якщо фільтр не прийняв імен.

Як я можу зробити подібну річ і ініціалізувати масив String (або будь-який інший масив для цього питання), щоб мати довжину 0?


7
Я щойно зрозумів, що це дурне питання :( Оскільки ці масиви ініціалізуються точно так само, як і будь-який інший масив, просто розміром 0. Показує, як часто я ініціалізую масиви сьогодні. Я залишу питання (не видаляю його) причиною одного дня хтось ще може бути таким же дурним, як я був зараз :)
Рон Туффін

1
Мене бентежить питання про те, який варіант використання ви мали б для масиву довжиною 0, і чому ви не просто запросили б nullу цьому спеціальному випадку.
Блейк

Відповіді:


230

Як говорили інші,

new String[0]

дійсно створить порожній масив. Однак є одна приємна річ у масивах - їх розмір не може змінюватися, тому ви завжди можете використовувати ту саму порожню посилання на масив. Отже, у своєму коді ви можете використовувати:

private static final String[] EMPTY_ARRAY = new String[0];

а потім просто повертати EMPTY_ARRAYщоразу, коли вам це потрібно - немає необхідності створювати новий об’єкт кожного разу.


7
Здається, що всім подобається вводити текст:private static final String[] EMPTY_ARRAY = {};
Thomas Jung

8
@Thomas: Я вважаю, що для конкретного випадку я віддаю перевагу більш чіткій формі. Мені зрозуміліше, що це означає "Я хочу рядок з 0 елементами", а не "Я хочу масив із цим вмістом - який порожній". Гадаю, лише особисті переваги.
Джон Скіт

1
@Tony - я повинен використовувати декілька місць, де Java може зробити висновок про тип. :-)
Томас Юнг

1
@delive: Приклад, який я надавав, все одно створить порожній масив, але оскільки він порожній, ви не можете використовувати EMPTY_ARRAY[0]- це намагається отримати доступ до елемента 0, який не існує ...
Джон Скіт,

1
@theyuv: Зрештою, це не матиме значення. Якщо вам це потрібно лише в одному місці, оголосіть його в тому класі. Якщо ви знайдете, що він вам потрібен у більшій кількості місць, ви завжди можете перемістити його до класу "утиліта".
Джон Скіт


18
String[] str = {};

Але

return {};

не працюватиме, оскільки інформація про тип відсутня.


10
return new String[] { };і return new String[0];працювали б обоє.
Бомбе

13

Гаразд, я насправді знайшов відповідь, але подумав, що все-таки "імпортую" питання в ТАК

String[] files = new String[0];
або
int[] files = new int[0];


Додайте такий коментар до свого питання ... або виберіть одну з відповідей, яка сказала те саме.
Джонатан Леффлер

6
Дякую за коментар Джонатан. Як ви могли помітити, я опублікував цю відповідь раніше, ніж будь-хто інший (і як такий відповіді на вибір не було). Я також не бачу, як додавання відповіді на питання робить кращим питання.
Рон Туффін

2

Ви можете використовувати ArrayUtils.EMPTY_STRING_ARRAY від org.apache.commons.lang3

import org.apache.commons.lang3.ArrayUtils;

    class Scratch {
        public static void main(String[] args) {
            String[] strings = ArrayUtils.EMPTY_STRING_ARRAY;
        }
    }

0

Створіть функцію, яка не поверне null, а поверне порожній масив, який ви можете пройти через код нижче, щоб зрозуміти.

    public static String[] getJavaFileNameList(File inputDir) {
    String[] files = inputDir.list(new FilenameFilter() {
        @Override
        public boolean accept(File current, String name) {
            return new File(current, name).isFile() && (name.endsWith("java"));
        }
    });

    return files == null ? new String[0] : files;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.