【发布时间】:2011-07-09 20:15:20
【问题描述】:
我一直在研究 Java 语言规范 here(我应该出去喝杯啤酒),我很好奇方法可以包含什么。规范声明方法体可以包含一个块
MethodBody:
Block
“块”包含“块语句”。 'BlockStatement' 规则如下所示:
BlockStatement :
LocalVariableDeclarationStatement
ClassOrInterfaceDeclaration
[Identifier :] Statement
我可以理解“LocalVariableDeclarationStatement”,它可能是
[final] int x, y, z;
但是,我不明白为什么存在“ClassOrInterfaceDeclaration”规则。该规则如下所示:
ClassOrInterfaceDeclaration:
ModifiersOpt (ClassDeclaration | InterfaceDeclaration)
ClassDeclaration:
class Identifier [extends Type] [implements TypeList] ClassBody
InterfaceDeclaration:
interface Identifier [extends TypeList] InterfaceBody
这里发生了什么 - 你不能肯定地在一个块中声明一个类或接口? 有人可以帮助澄清这种困惑吗?
更新:我可以在一个方法中定义一个类,但是下面的不行:
public class Foo {
public void doFoo() {
interface dooJa {
int bar();
}
}
}
编译器抱怨说“成员接口 dooJa 只能在*类或接口中定义”...有什么解释吗?
【问题讨论】: