为什么在接口内声明接口?

时间:2013-08-21 20:45:51

标签: java

这是java.util.Map的简化版本

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

    void clear();
}

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

如何实现内部接口?我可以实现内部吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

我将会......在这里非常理论化......所以请保持开放的心态。单独的Entry接口会将该概念与其所针对的上下文分离。不要只考虑界面,而是考虑它的实现。例如,Entry中定义的HashMap内部静态类:

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

    (...)
}

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

事实上,我打赌你想知道“当然,但在很多情况下都可以使用一个条目,特别是当你需要一个Key - Value对”时。事实上,这是正确的,但我个人同意当前的设计决定,因为它提供了在一个地方实现Map所需的一切。