我继承了一些具有以下功能的Java代码:
interface PairDeviceCallbacks extends BasePresenter {
interface View extends BaseView {
// declare some methods
}
void onDeviceClicked( ... )
}
Class1 implements PairDeviceCallbacks
和Class2 implements PairDeviceCallbacks.View
。我不明白为什么它是这样构造的,特别是为什么有嵌套的接口。为什么不简单地使用两个独立的顶级接口?有没有理由增加这种复杂性?
答案 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)
据我所知,拥有嵌套接口有两个好处。首先,它允许我们对彼此相关的接口进行分组,并且还以某种方式增强封装。即,我们只能通过在同一个包中使用外部接口或类来调用嵌套接口。