【问题标题】:What is a static interface in java?java中的静态接口是什么?
【发布时间】:2012-01-12 13:31:42
【问题描述】:

我正在阅读Map.Entry 接口,当我注意到它是static 接口时。我不太明白什么是静态接口,它与常规接口有什么不同?

public static interface Map.Entry<K,V>

这是接口的定义。此处的文档:Map.Entry<K,V>

【问题讨论】:

标签: java interface


【解决方案1】:

我很好奇它不是内部接口的情况。

static 修饰符只允许在嵌套类或接口上使用。在您的示例中,Entry 嵌套在 Map 接口内。

对于接口,static 修饰符实际上是可选的。这种区别对于接口没有意义,因为它们不包含无论如何都可以访问外部this 的代码。

【讨论】:

  • 感谢您指出这一点。我不知道 Entry 是一个内部接口,静态修饰符只允许在嵌套类/接口上使用。
  • “这种区别对接口没有意义”...这让很多人感到困惑。没有区别。他们不应该允许接口使用“静态”关键字。我在吗?
  • 我不明白那个解释。据我了解,静态方法是您无法覆盖的方法,对于类也是如此,如果类是静态的,则您无法覆盖它的方法,因为它们都是静态的,但接口不能是静态的,因为在这种情况下您不会能够覆盖它的方法。所以我不明白界面如何是静态的?
  • @MaxHusiv 对静态类的理解是不正确的,它不会导致方法是静态的。对于嵌套类static 表示该类没有对外部类的隐式引用。
  • 接口中的静态接口在核心休眠中使用,例如接口CustomEntityDirtinessStrategy。
【解决方案2】:

静态内部接口与内部接口相同,所有访问规则与内部静态类相同。因此,只有当您可以访问其父类/接口时,才能访问内部接口。在以下情况下,您只能从接口 A 的包访问接口 B,因为 A 具有默认访问修饰符。顺便说一句:接口 B 可以是静态的,也可以不是。

 interface A {
    void testA();
    public interface B {
        void testB();
    }
 } 

【讨论】:

  • 我很好奇它不是内部接口的情况。
【解决方案3】:

最后,即使是 Android Studio 也表示不需要使用带有内部接口的 static

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2018-01-28
    • 2010-12-16
    • 1970-01-01
    • 2010-11-08
    • 2013-09-18
    • 2016-09-22
    相关资源
    最近更新 更多