Java方法签名后的奇怪“”

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

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

我以为不能编译,并想解决我认为是一个错字,但后来我记得Java编译器确实接受它!

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

这是一个返回int[]

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

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

这是由过时的生产支持:

MethodDeclarator
MethodDeclarator []

但不应该用在新代码中。

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

因为有一个C标签,我会指出在C和C ++中可能有类似(但不完全相同)的符号:

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

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

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

Java的语法允许以下内容:

 int[] intArr = new int[0]; 

并且

 int intArr[] = new int[0]; 

这看起来更像C语言的语法。

所以用函数,名字可以在[]之前或之后出现,types仍然是int []