Java方法签名后奇怪的“[]”

问题

我今天查看了一些Java代码,我发现了一些奇怪的语法:

public class Sample {
  public int get()[] {
    return new int[]{1, 2, 3};
  }
}

我认为无法编译并想修复我认为是错误的内容,但后来我记得Java编译器确实接受了它!

有人可以帮我理解这是什么意思吗?它是一组函数吗?


#1 热门回答(102 赞)

这是一个返回int[]的方法。

Java语言规范(8.4方法声明)为了与旧版本的Java平台兼容,允许返回数组的方法的声明表单(部分或全部)形成数组声明的空括号对在参数列表后键入。过时的生产支持这一点:MethodDeclarator:MethodDeclarator []但不应在新代码中使用。


#2 热门回答(19 赞)

这是一个有趣的问题。在java中你可以说int[] a;,以及int a[];
从这个角度来看,为了得到相同的结果,只需要移动[]即可
并写public int[] get() {
仍然看起来代码来自混淆器......


#3 热门回答(10 赞)

由于存在C标记,我将指出在C和C中可能存在类似(但不完全相同)的表示法:

函数f返回指向10个int的数组的指针。

int tab[10];

int (*f())[10]
{
    return &tab;
}

Java根本不需要星号和括号。