Java中是否允许在方法内部声明interface?
关于方法内部声明接口的问题
你提到的"不能在代码块内部声明interface;interface本质上是静态的"是基于旧版Java规范的说法——在Java 16之前,确实不允许在方法、代码块这类局部作用域里定义接口。但Java 16引入了**本地接口(Local Interface)**的特性,允许在局部作用域(比如方法内部)声明接口,你的代码正是利用了这个新特性。
关键点说明:
- 本地接口本身确实是静态的:即使你没显式加
static修饰符,方法内部的接口默认就是静态的,它无法访问外部类的非静态成员(除非是final/有效final的局部变量),这和"interface本质是静态的"说法并不矛盾。 - 你的代码完全合法:在Java 16及以上版本中,这段代码可以正常编译运行,执行
testing()方法会输出hello world。
附上你的代码(格式调整后):
public void testing() { interface LocalInterface { void prints(); } LocalInterface localInterface = new LocalInterface() { @Override public void prints() { System.out.println("hello world"); } }; localInterface.prints(); }
内容的提问来源于stack exchange,提问作者kaka
相关产品推荐
相关产品推荐

