java - 方法内部不允许接口(interface)

标签 java methods interface scjp

我研究了一些 OCPJP 7 认证的书籍,在内部类章节中有一些奇怪/不完整的信息。我试过在一个方法中创建一个接口(interface),但似乎你不能那样做,你只能在一个方法中创建类。您有什么理由不能这样做,或者这只是一个缺失的功能?

示例代码:

public class Outer {
  public void method() {
    class C {} // allowed
    interface I {} // interface not allowed here
  }
}

最佳答案

如果您仔细阅读Java Tutorials ,你会看到:

You cannot declare an interface inside a block, because interfaces are inherently static.

这意味着如果你有一个像这样的界面:

public class MyClass {
   interface MyInterface {
       public void test();
   }
}

你将能够做到

MyClass.MyInterface something = new MyClass.MyInterface() {
    public void test () { .. }
};

因为MyInterface 将显式static。绑定(bind)到封闭类的实例没有意义,因为它只是提供了一些抽象,不必绑定(bind)到特定实例或封闭类的状态。

同样的情况也适用于接口(interface)嵌套在方法中的情况。方法内部的任何内容都不能(明确地)static(因为非静态方法绑定(bind)到封闭类的特定实例),因此您不能拥有本地接口(interface)。

关于java - 方法内部不允许接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180446/

相关文章:

java - Spark : How to retrieve the original data for which stage has failed?

Java注解在注解声明中执行一个方法(用于android)

pointers - 如何将不同的错误接口(interface)实现存储在一起,然后在 Go 中使用它们进行类型比较?

java - 关于 Java 8 函数式接口(interface)的问题

java - 访问嵌套接口(interface)数据变量

java - 发现 javax.mail.AuthenticationFailedException : failed to connect, 未指定密码?在收听密码正确的新邮件时

Java 扫描器和错误

java - Spring @Transactional 继承规则

java - 如何同时使用 toString() 或 print() 等显示两个输出?

java - javascript 和 jquery 中的方法和函数重载