奇怪的数组返回类型

2022-08-31 13:40:44

有没有人见过像这样放在方法签名之后的数组?[]

public static String mySplit(String s)[] {
    return s.split(",");
}

public static void main(String... args) {
    String[] words = mySplit("a,b,c,d,e");
    System.out.println(Arrays.toString(words));
}

指纹

[a, b, c, d, e]

在过去,奇怪的符号一直用于“C”兼容性,但我也不会想象有人用C写这个。

有谁知道为什么这是允许的?

我正在使用Java 7 update 10,以防万一。

这在Java 6中做同样的事情。http://ideone.com/91rZV1


顺便说一句,这不会编译,我也不会期望它

public static <T> List mySplit(String s)<T> {
    return Collections.emptyList();
}

答案 1

有谁知道为什么这是允许的?

在这种情况下,它是为了与Java本身向后兼容。来自 JLS 第 8.4 节

为了与旧版本的 Java SE 平台兼容,允许声明返回数组的方法,以便在正式参数列表之后放置(部分或全部)构成数组类型声明的空括号对。以下过时的生产支持此功能,但不应在新代码中使用。

是的,你确实应该把它看作是一种可憎的东西,除了震惊其他开发人员之外,没有其他好的目的。实际上,你可以用它来在派对上赢得一些钱,通过押注它会编译,反对那些从未见过它的人......

以下是思想正确的编码人员期望无效的方法:

public String[] mwahahaha(String[] evil[])[] {
    return evil;
}

答案 2

就像

  String[] a; 

与 相同

  String a[];

方法返回类型的语法也是如此

  public static String mySplit(String s)[] {

与 相同

  public static String[] mySplit(String s) {

但我想我从未在生产代码中看到你提到的版本。