JLS 17 关于确定数组类型有以下说明:
方法的返回类型(第 8.4.5 节)可以是数组类型。精确的 数组类型取决于可能作为数组一部分出现的括号对 在方法声明的开头或方法的后面键入 形式参数列表,或两者兼而有之。数组类型表示为:
- 结果中出现的元素类型;那么,
- 形参列表后面的任何括号对;那么,
- 结果中出现的任何括号对。
形式参数与方法的结果类型有什么关系?任何例子表示赞赏。
该部分讨论的是有效的,但非常非常不推荐风格:
public int[] aMethodThatReturnsAnArrayOfIntArrays() [] {
return new int[10][20];
}
注意方法名称和“形式参数列表”后面有数组括号 (即
()
- 即参数列表;此特定示例有零个参数)。
这与:
相同public int[][] aMethodThatReturnsAnArrayOfIntArrays() {
return new int[10][20];
}
您始终可以将
)
和 {
之间出现的任何数组括号移至返回类型的末尾 - 这对于方法的作用或含义没有影响。
这反映了如何通过变量声明来完成这个特技:
int[][] x = new int[10][20];
for (int y[] : x) { .. }
int[] x[] = new int[10][20], y = new int[30];
...这些表格也不推荐。
为什么它是合法的?因为它是用 C 编写的,而 java 大部分都是从那里复制了它的有效语法。