String配列を変数にいれずにreturn文へツッコむ方法

String配列じゃなくても配列ならなんでもいいんだけど、少し特殊なので書きたいときに文法を忘れてしまっていることに過去3回遭遇。ブログに書いとく。
例えばString配列を戻り値とするメソッドがあるとします。ふつうは以下のように書きますよね。

public String[] getNames() {
    String[] names = {"Windows", "Mac", "Linux"};
    return names;
}


で、「変数に入れる必要ないだろ可読性的に考えて」というときの話です。以下のようにそれっぽく書いてみるとコンパイルエラーになってしまいます。

public String[] getNames() {
    return {"Windows", "Mac", "Linux"};
}
public String[] getNames() {
    return new String["Windows", "Mac", "Linux"];
}
public String[] getNames() {
    return new String(){"Windows", "Mac", "Linux"};
}
public String[] getNames() {
    return new String[3]{"Windows", "Mac", "Linux"};
}



正しい文法はこうです。

public String[] getNames() {
    return new String[]{"Windows", "Mac", "Linux"};
}