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

2022-09-02 22:57:24

我想知道我们可以在接口中定义一个接口吗?喜欢

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

这是在采访中提出的问题。任何实际用途。


答案 1

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

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

有关详细信息,请参阅此处

进一步。。。

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

public interface Processor {
   void execute(NotificationListener listener);

    interface NotificationListener {
        void processingCompleted();
    }  
}

关于这个话题,太阳网站的另一个很好的阅读在这里

特别要注意的是,在实现接口时,不需要实现嵌套在其中的任何接口。


答案 2

确定。。查看 java.util.Map 接口的源代码。映射接口包含一个嵌套的入口接口。

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

interface Entry <K,V> {
  ..
}

但是javadoc说

public static interface Map.Entry<K,V>

我想这是因为嵌套接口是隐式的“公共静态”,即使源代码没有这么说。(但是接口内的方法是隐式公共的,不能是静态的,也就是说,接口中只允许使用实例方法)。

-dbednar 2013-07-02