Joe*_*dev 12 java language-features
我一直在研究Java语言规范在这里(而不是我应该出有啤酒),我很好奇什么样的方法可以包含.规范声明方法体可以包含块
MethodBody:
Block
Run Code Online (Sandbox Code Playgroud)
'Block'包含'BlockStatements'的地方.'BlockStatement'规则如下所示:
BlockStatement :
LocalVariableDeclarationStatement
ClassOrInterfaceDeclaration
[Identifier :] Statement
Run Code Online (Sandbox Code Playgroud)
我可以理解'LocalVariableDeclarationStatement'
[final] int x, y, z;
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么 'ClassOrInterfaceDeclaration'规则存在.此规则如下:
ClassOrInterfaceDeclaration:
ModifiersOpt (ClassDeclaration | InterfaceDeclaration)
ClassDeclaration:
class Identifier [extends Type] [implements TypeList] ClassBody
InterfaceDeclaration:
interface Identifier [extends TypeList] InterfaceBody
Run Code Online (Sandbox Code Playgroud)
这里发生了什么 - 您无法确定在块内声明类或接口?有人可以帮助解释这种混乱吗?
更新:我可以在方法中定义一个类,但以下方法不起作用:
public class Foo {
public void doFoo() {
interface dooJa {
int bar();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说"成员接口dooJa只能在顶级类或接口中定义"......任何解释?
哦,是的,你可以在方法体内声明一个类.:-)
class A {
public void doIt() {
class B {}
B b = new B();
System.out.println(b.getClass());
}
}
Run Code Online (Sandbox Code Playgroud)
您已经对不再工作的界面进行了很好的观察。原因是您正在查看非常旧版本的语法。看起来已经10多岁了。看一下 Java 6 的语法(您可能正在测试它):
http://www.it.bton.ac.uk/staff/rnb/bosware/javaSyntax/rulesLinked.html#BlockStatement
你会看到块语句:
BlockStatement:LocalVariableDeclarationStatement ClassDeclaration 语句
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |