4

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

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

    void clear();
}

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

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

4

2 回答 2

5

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

于 2013-08-21T20:48:06.483 回答
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它本身就是一个接口,需要一点抽象来让特定的实现定义条目的类型他们会使用。

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

于 2013-08-21T21:01:07.003 回答