我一直在研究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:

07-24 09:37
查看更多