Java 我们可以在接口中定义接口吗?

Java 我们可以在接口中定义接口吗?,java,interface,Java,Interface,我想知道我们能否在一个接口中定义一个接口。 像 interface abc { void show(); public interface xyz { void read(); } } 这是采访中提出的问题。任何实时使用此功能。是的,我们可以做到。java中嵌套接口的定义如下: 嵌套接口是其声明发生在另一个类或接口主体内的任何接口。顶级接口是不是嵌套接口的接口 有关更多信息,请参阅 进一步 一个原因可能是外部接口有一个将回调实现作为参数的方法。在这种情况

我想知道我们能否在一个接口中定义一个接口。 像

interface abc {
    void show();
    public interface xyz {
        void read();
    }
}

这是采访中提出的问题。任何实时使用此功能。

是的,我们可以做到。java中嵌套接口的定义如下:

嵌套接口是其声明发生在另一个类或接口主体内的任何接口。顶级接口是不是嵌套接口的接口

有关更多信息,请参阅

进一步

一个原因可能是外部接口有一个将回调实现作为参数的方法。在这种情况下,嵌套接口是回调方法必须实现的约定。我认为没有理由在顶层声明回调接口

public interface Processor {
   void execute(NotificationListener listener);

    interface NotificationListener {
        void processingCompleted();
    }  
}
sun站点关于这个主题的另一个好的阅读是

特别要注意的是,当您实现一个接口时 不需要执行任何 嵌套在中的接口。

你可以自己测试一下,在大约30秒内得到一个完全确定、没有意见、没有风险的答案


相比之下,在论坛上可能永远等待可能不正确的回复并不是一种理性的询问方式。

我们在应用程序中使用它, 接口内部的接口,基本上使用它作为特定于功能的常量, 这样就不会有其他人在项目的其他地方创建与此服务相关的新常量1

示例代码:

Public interface Service1{

  public interface ServiceInter1{

   public Interface In{
    Declare your own constants
   }

   public Interface Out{
      Declare your own constants
   }

 }

}

当然。。查看java.util.Map接口的源代码。映射接口包含嵌套的条目接口

有趣的是,在源代码中它只是说

interface Entry <K,V> {
  ..
}
接口条目{
..
}
但是javadoc说

public static interface Map.Entry<K,V>
公共静态接口映射。条目
我想这是因为嵌套接口是隐式的“公共静态”,即使源代码没有这样说。(但接口内的方法是隐式公共的,不能是静态的,也就是说,接口中只允许使用实例方法)

-dbednar 2013-07-02是的,我们可以定义

在映射界面内部,定义如下所示的条目。 公共接口图{

/**
 * Map.Entry is a key/value mapping which is contained in a Map.
 */
public static interface Entry<K, V> {
    .....some loigic
 }
}
/**
*条目是包含在映射中的键/值映射。
*/
公共静态接口条目{
........................................................一些
}
}

这一功能的真正用途是通过提供门面接口简化复杂系统。-检查外观设计模式


@girinie我认为您应该接受HotTester的答案,但要实时使用它,请查看Map和Map.Entry。Entry接口是Map协议的一部分(从Map.entrySet()返回时使用),因此它是Map接口的一部分。(写这篇文章时,HotTester在答案中添加了类似的信息,+1)不要对没有引用的文本使用引用格式。您的最后一个链接已断开。您应该补充一点,使用kotlin和Java 8 lambda的这个具体接口似乎太多了,没有必要使用嵌套接口+1问题提交者的这种懒惰对任何人都没有好处。+1它让我想起了这篇文章:-1,您这个乌贼,一个好的答案不仅仅是说“是”或“不是”,但也包括更具体的信息,如赞成和反对,用例和其他东西,可以由有经验的人获得。即使这个问题也需要一个警告,请参见公认的答案。@Bagzerg什么警告?我看不出有什么警告。你怎么能比“是”更具体呢?这就是他要求的。不是“优点和缺点,用例…”。一个好的答案应该回答实际提出的问题,而不是胡扯。“你乌贼”是谁或什么?@DmitryGryazin同意你的看法。也许问这个问题的人只对是/否感兴趣,但其他人仍然可以讨论优点、缺点、用例、实现细节等,并且可以从讨论中学到很多有趣的东西。很好的解释。此外,我从来没有见过有人像你在这里那样写他的答案+1.