最佳答案
令我惊讶的是 Map<?,?>
不是 Collection<?>
。
我认为,如果它被宣布为这样的话,会有很大的意义:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
毕竟,Map<K,V>
是 Map.Entry<K,V>
的集合,不是吗?
那么为什么没有这样实现呢?
感谢 Cletus 提供的最权威的答案,但我仍然想知道为什么,如果您已经可以将 Map<K,V>
视为 Set<Map.Entries<K,V>>
(通过 entrySet()
) ,它不仅仅扩展了该接口。
如果一个
Map
是一个Collection
,元素是什么? 唯一合理的答案是“键-值对”
没错,interface Map<K,V> extends Set<Map.Entry<K,V>>
就太棒了!
但是这提供了一个非常有限的(并不特别有用的)
Map
抽象。
但是如果是这样的话,那么为什么 entrySet
是由接口指定的呢?它必须是有用的(而且我认为为这种立场辩护很容易!).
您不能询问给定键映射到什么值,也不能在不知道它映射到什么值的情况下删除给定键的条目。
我不是说这就是 Map
的全部!它可以和 应该保持所有其他方法(除了 entrySet
,它现在是冗余的) !