Java方法签名后奇怪的"[]"

Joh*_*itb 118 java arrays syntax

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

public class Sample {
  public int get()[] {
    return new int[]{1, 2, 3};
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Meh*_*ari 110

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

Java语言规范(8.4方法声明)

为了与旧版本的Java平台兼容,允许返回数组的方法的声明表单放置(部分或全部)在参数列表之后形成数组类型声明的空括号对.

这是过时的生产支持:

MethodDeclarator:
    MethodDeclarator []

但不应在新代码中使用.

  • 最好的一点是,它是_some或all_.因此,如果你有一个方法返回一个三维的int数组,你可以这样做:`public int [] foo()[] [] {`并让人眼睛流血. (91认同)

Cos*_*lis 20

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

  • @Kos:你为什么暗示混淆器和C程序员必须是两个不同的东西?很多时候他们不是! (4认同)
  • 从混淆器?更有可能来自C程序员(你不能返回一个数组,但是指向数组类型的指针 - 是......它看起来很相似). (2认同)

APr*_*mer 10

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

这里函数f返回一个指向10个int数组的指针.

int tab[10];

int (*f())[10]
{
    return &tab;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @ted,使用typedef. (2认同)

dav*_*vin 5

java 的语法允许以下内容:

int[] intArr = new int[0];
Run Code Online (Sandbox Code Playgroud)

并且

int intArr[] = new int[0];
Run Code Online (Sandbox Code Playgroud)

来自 c 风格的语法看起来更熟悉。

同样,对于函数,名称可以出现在 [] 之前或之后,并且类型仍然是 int[]