JLS 17 对于确定数组类型有以下规定:
方法(第 8.4.5 节)的返回类型可以是数组类型。精确的数组类型取决于括号对,这些括号对可能作为类型的一部分出现在方法声明的开头或方法的形式参数列表之后,或两者兼而有之。数组类型表示为:
- 结果中出现的元素类型;然后,
- 形式参数列表后面的任何括号对;然后,
- 结果中出现的任何括号对。
形式参数与方法的结果类型有什么关系?任何例子都值得赞赏。
JLS 17 对于确定数组类型有以下规定:
方法(第 8.4.5 节)的返回类型可以是数组类型。精确的数组类型取决于括号对,这些括号对可能作为类型的一部分出现在方法声明的开头或方法的形式参数列表之后,或两者兼而有之。数组类型表示为:
- 结果中出现的元素类型;然后,
- 形式参数列表后面的任何括号对;然后,
- 结果中出现的任何括号对。
形式参数与方法的结果类型有什么关系?任何例子都值得赞赏。
在 JLS 17,第 6.4 节中,它说(强调我的):
如果使用本地类或接口 C 的名称在 C 的范围内声明新的本地类或接口,则会出现编译时错误,除非新的本地类或接口是在出现在 C 中的类或接口声明中声明的。 C的范围
同时在第 8.1 节中:
如果一个类与其任何封闭类或接口具有相同的简单名称,则这是一个编译时错误。
虽然逻辑上不存在矛盾,但我想知道当第二条规则在不满足“除非”的条件时无论如何都会导致编译错误时,在第一个规则中使用“除非”子句有什么意义?也许我错过了什么?
例如:
class Test {
public void foo() {
class C {
public void bar() {
class SomeNested {
public void xyz() {
class C{} // Section 6.4 says nothing what happens in this case. Section 8.1 results in compilation error
}
}
}
}
}
}