我们可以在方法中声明接口吗?

Can we declare interface inside a method?

提问人:kaka 提问时间:10/25/2023 更新时间:10/25/2023 访问量:63

问:

“你不能在块内声明接口;接口本质上是静态的“这是 https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html#local-classes-are-similar-to-inner-classes

但是,我可以在下面的代码中声明一个接口。我还可以通过扩展接口来创建一个匿名类。

public void testing() {
    
    interface LocalInterface {
        void prints();
    }
    
    LocalInterface localInterface = new LocalInterface() {

        @Override
        public void prints() {
            System.out.println("hello world");
        }};
        localInterface.prints();
}
java 内部 匿名 本地类 嵌套类型

评论

2赞 Andrew S 10/25/2023
这取决于 JDK 版本
2赞 Slaw 10/25/2023
请注意,这些 Oracle 教程都是“为 JDK 8 编写的”。从那时起发生了很大变化(当前的 GA 版本是 21.0.1)。

答:

2赞 harsh pamnani 10/25/2023 #1

爪哇 16+

这取决于您使用的 JDK。-inside-a-method 功能是在 JDK 16 中引入的。和 同上。请参阅 JEP 395:记录interfaceenumrecord

如果您使用的是 IntelliJ,当 JDK 设置为 8 时,它会显示错误。错误显示:,建议升级到 JDK 16+。Local interfaces are not supported at language level '8'

enter image description here