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

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

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

我认为这不能编译,并想修复我认为是一个输入错误,但后来我记得 Java 编译器实际上接受了它!

有人能帮我理解一下它的意思吗? 它是一个函数数组吗?

7726 次浏览

真是个有趣的问题。 在 java 中,你可以说 int[] a;,也可以说 int a[];
从这个角度来看,为了得到相同的结果,只需要移动 [] < br > 并写入 public int[] get() {。< br > 仍然看起来像代码来自一个模糊..。

Java 的语法允许以下内容:

int[] intArr = new int[0];

还有

int intArr[] = new int[0];

从 c 样式的语法来看,它看起来更加相似。

因此,对于一个函数,名称可以出现在[]之前或之后,而类型仍然是 int []

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

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

为了与 Java 平台的旧版本兼容,声明表单 for a method that returns an array is allowed to place (some or all of) the empty bracket pairs that form the declaration of the array type after the parameter list.

这得到了过时产品的支持:

方法声明人 :
    方法声明程序 [ ]

但不应在新代码中使用。

由于有一个 C 标记,我将指出在 C 和 C + + 中可以使用类似(但不完全相同)的表示法:

这里函数 f返回一个指向10整数数组的指针。

int tab[10];


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

Java 不需要星号和括号。