2010-01-11 4 views
8
private final String[] okFileExtensions = new String[] { "csv" }; 

Может кто-нибудь объяснит, почему {} написан после объявления массива String?Декларация строкового массива Синтаксис

Спасибо.

+1

Рассмотрите возможность использования перечисления вместо явного жесткого кодирования расширений файлов. –

ответ

16

Это массив одного элемента. В этом случае, содержащий String"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" }; 

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

+2

Если вы хотите добавить несколько значений расширения файла в массив, вы просто разделите их запятыми, например. private final String [] okFileExtensions = {"csv", "txt", "sql"}; – TabbyCool

+0

Теперь я добавил это к моему ответу. –

+0

'Коллекции обычно должны быть предпочтительнее, чем массивы (для ссылочных типов), которые во многом зависят от цели и объема массива. Как указано здесь, это слишком общее для моего вкуса. – rsp

4

Это действительный синтаксис 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"}; 
1

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

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

Возможно ... но синтаксис 'new [] {...}' может сделать больше. –