Я изучил спецификацию языка Java здесь (вместо этого я должен был выпить пива), и мне интересно, что может содержать метод. В спецификации указано, что тело метода может содержать блок
MethodBody:
Block
Где "Блок" содержит "BlockStatements". Правило "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 может быть определен только внутри класса или интерфейса верхнего уровня"... любые объяснения?