Странное объявление массива строк Синтаксис

private final String[] okFileExtensions = new String[] { "csv" };

Был бы кто-то объяснять почему {} записан после объявления Массива строк?

Спасибо.

8
задан Phoenix 23 June 2014 в 06:16
поделиться

4 ответа

Это массив из одного элемента. В данном случае содержащий строку "csv".

При записи в рамках декларации это может быть записано в более лаконичной форме:

private final String[] okFileExtensions = { "csv" };

Массивы с несколькими элементами используют запятую между значениями. Никаких значений не обязательно должно быть вообще.

private final String[] okFileExtensions = { "csv", "tsv" };

private final String[] noFileExtensions = { };

Стоит отметить, что хотя ссылка является окончательной, массив - нет. Поэтому вы можете записать:

    okFileExtensions[0] = "exe";

Способ обойти это - переключиться на коллекции и использовать немодифицируемую реализацию:

private final Set<String> okFileExtensions = Collections.unmodifiableSet(
    new HashSet<String>(Arrays.asList({
        "csv"
    }));

JDK8 предназначен для усовершенствования коллекций, которые сделают это более лаконичным. Возможно List и Set литералы внутри языка. Возможно:

private final Set<String> okFileExtensions = { "csv" };

Коллекции, как правило, предпочтительнее массивов (для ссылочных типов).

16
ответ дан 5 December 2019 в 07:11
поделиться

Создание массива строк встроенный.

2
ответ дан 5 December 2019 в 07:11
поделиться

Это действительный синтаксис Java для объявления массива.

Вы можете использовать это, когда передаете массив без объявления переменной:

 public void printArray( String [] someArray ) {
      for( String s : someArray) {
          System.out.println( s );
      }
  }

И вызывать его следующим образом:

  printArray( new String [] { "These", "are", "the", "contents"} );

Кудрявые скобки можно использовать только при объявлении массива, поэтому нельзя:

Stirng [] a;

a = {"on", "two"};
4
ответ дан 5 December 2019 в 07:11
поделиться

Я думаю, что менее подробное (также запутащее) декларация была бы:

private final String[] okFileExtensions = {"csv"};
1
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

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