【问题标题】:Why declare an interface inside an interface? [duplicate]为什么要在接口内部声明接口? [复制]
【发布时间】:2013-08-24 09:52:24
【问题描述】:

这是java.util.Map的简化版

public interface Map {
    interface Entry{
        int getKey();
    }

    void clear();
}

我的问题是为什么要这样做?

内部接口应该如何实现?我可以只实现内部的吗?

【问题讨论】:

  • 您期望的替代方案是什么?
  • 例如为什么不在外部接口中声明方法?
  • @Ryan:这是两种不同的类型。

标签: java


【解决方案1】:

我会...在这里非常理论...所以请保持开放的心态。一个单独的Entry 接口将把这个概念从它的上下文中分离出来。不要只考虑接口,还要考虑它的实现。以HashMap中定义的Entry内部静态类为例:

static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;

    (...)
}

这个Entry 类不打算在外部使用,它实现的接口代表一个服务契约,仅供Maps 内部使用,特别是因为Map 本身就是一个接口,需要一点让特定实现定义它们将使用的条目类型的抽象。

确实,我敢打赌您想知道“当然,但是条目可以在许多情况下使用,特别是当您需要键值对时”。事实上,这是真的,但我个人同意当前的设计决策,因为它提供了在一个地方实现 Map 所需的一切。

【讨论】:

    【解决方案2】:

    这里Map 也用作命名空间。这是因为 Entry 不属于全局范围 - 还有许多其他实体是 Entries 并且不需要 Map 的条目。这表明Entry 表示与Map 相关的条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多