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