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

bob*_*bob 8 java arrays syntax

private final String[] okFileExtensions = new String[] { "csv" };
Run Code Online (Sandbox Code Playgroud)

有人请解释为什么{}在String数组声明后写的?

谢谢.

Tom*_*ine 16

它是一个元素的数组.在这种情况下包含String "csv".

当作为声明的一部分编写时,可以用更简洁的形式编写:

private final String[] okFileExtensions = { "csv" };
Run Code Online (Sandbox Code Playgroud)

多元素数组在值之间使用逗号.根本不需要任何价值观.

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

private final String[] noFileExtensions = { };
Run Code Online (Sandbox Code Playgroud)

值得注意的是,尽管引用是最终的,但数组却不是.所以你可以写:

    okFileExtensions[0] = "exe";
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是切换到集合并使用不可修改的实现:

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

JDK8旨在对集合进行增强,使其更加简洁.可能ListSet语言中的文字.可能是:

private final Set<String> okFileExtensions = { "csv" };
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你想为数组添加多个文件扩展名值,你只需用逗号分隔它们,例如.private final String [] okFileExtensions = {"csv","txt","sql"}; (2认同)