我一直在研究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
这是怎么回事-您不能确定在一个块中声明一个类或接口(interface)吗?
有人可以帮忙澄清一下这种困惑吗?
更新:我可以在方法中定义一个类,但是以下操作无效:
public class Foo {
public void doFoo() {
interface dooJa {
int bar();
}
}
}
编译器提示说“成员接口(interface)dooJa只能在顶级类或接口(interface)内定义”……有什么解释吗?
最佳答案
您已经对接口(interface)不再起作用进行了很好的观察。原因是您正在查看语法的非常旧的版本。它看起来已经超过10年了。看一下Java 6的语法(可能正在测试的语法):
http://www.it.bton.ac.uk/staff/rnb/bosware/javaSyntax/rulesLinked.html#BlockStatement
您将看到blockstatement: