这些嵌套接口有没有理由?

时间:2017-11-08 00:27:39

标签: java interface nested

我继承了一些具有以下功能的Java代码:

interface PairDeviceCallbacks extends BasePresenter { 
    interface View extends BaseView { 
    // declare some methods
    }
    void onDeviceClicked( ... )
}

Class1 implements PairDeviceCallbacksClass2 implements PairDeviceCallbacks.View。我不明白为什么它是这样构造的,特别是为什么有嵌套的接口。为什么不简单地使用两个独立的顶级接口?有没有理由增加这种复杂性?

2 个答案:

答案 0 :(得分:1)

接口必须由其他人实现。因此,它通常用作要求 (参数类)。外部接口可能需要在内部接口上执行某些操作(定义所需的方法)。

如果它非常特定于外部类/接口,则可以将其保留为嵌套接口。

界面的其他用途是指定服务已发送(返回结果)。很可能外层类提供了一个产生非常特定对象的方法。这样的特定接口也可以嵌套。

因此,这样的接口具体如何,确定接口是否有权成为独立接口。内部接口用作所需要求列表或提供的服务列表。

(已发明)示例

interface ChangeListener {
    interface ChangeEvent {
        Object getSource(); // Requirement: required functionality.
        Object getOldValue();
        Object getNewValue();
    }
    void onChange(ChangeEvent event); // Service: served/provided functionality.
}

// A library creator may add handling of colors:
public class ColorChangeEvent implements ChangeEvent {
    ColorChangeEvent(Object source, Color color) { ... }
    Object  getSource() { ... }
    Color getColor() { .... }
}

// An API user may only need to subclass ChangeListener:
add(new ChangeListener() { ... });

这里几乎可以期待泛型或ColorChangeListener。 接口用于可能的各种类层次结构。

对于现在的回调,lambdas更频繁地出现,只用一个方法替换太具体的接口:Consumer<List<Good>>等等。

嵌套类还有其他原因。非静态内部类可以访问外部实例。考虑像Book这样的外部容器类和像Chapter这样的内部类,因此可以访问本书的内容表等。

答案 1 :(得分:-1)

据我所知,拥有嵌套接口有两个好处。首先,它允许我们对彼此相关的接口进行分组,并且还以某种方式增强封装。即,我们只能通过在同一个包中使用外部接口或类来调用嵌套接口。