Я собираюсь быть ... ужасным теоретиком ... так что будьте непредвзято, пожалуйста. Отдельный интерфейс 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
в одном месте.
person
Fritz
schedule
21.08.2013