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 []