奇怪的字符串数组声明语法

时间:2010-01-11 15:56:59

标签: java arrays syntax

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

有人请解释为什么在字符串数组声明后写{}吗?

感谢。

4 个答案:

答案 0 :(得分: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旨在对集合进行增强,使其更加简洁。语言中可能有ListSet个文字。可能:

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

集合通常应优先于数组(对于引用类型)。

答案 1 :(得分: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"};

答案 2 :(得分:2)

创建一个strings内嵌数组。

答案 3 :(得分:1)

我认为一个不那么冗长(也令人困惑)的宣言应该是:

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