为什么LinkedHashMap类实现Map接口?
这个问题在这里已经有了答案:
你是对的:从链接哈希映射的声明中删除Map<K,V>
不会改变任何东西。 尽管LinkedHashMap<K,V>
实现Map<K,V>
仅仅是因为它扩展了HashMap<K,V>
,但链接哈希映射从常规哈希映射派生的事实是实现细节,而不是硬性要求。
另一方面,实现Map<K,V>
接口是一项基本要求。 如果设计人员决定从头开始实施LinkedHashMap<K,V>
,或者依赖其他基类(例如链表),则此要求不会消失。
这就是为什么LinkedHashMap<K,V>
的设计者明确提到Map<K,V>
:如果稍后某个基类会由于重新设计而改变,那么接口将保持原样。
那么,这可能是为了文档清晰起见,它没有增加任何代码。 这也可能是因为LinkedHashMap extends HashMap
是一个实现细节,要知道的是LinkedHashMap
是一个Map
。
实际上没有区别。 在我看来,在JDK类中总是这样( List
和它的子类存在相同的模式)。 设计师可能仍然没有删除这个冗余实现,以便在例如某人依靠反射来获取关于子类型的信息的情况下不会有任何中断。 例如,假设你定义了以下内容:
class MyCustomMap<K, V> extends LinkedHashMap<K, V> implements Map<K, V> {
}
然后,下面段输出具有和不具有不同的结果implements
:
Class<?>[] interfaces = MyCustomMap.class.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
System.out.println(interfaces[i]);
}
输出:
接口java.util.Map
将定义更改为:
class MyCustomMap<K, V> extends LinkedHashMap<K, V> {
}
那么不会打印界面。
链接地址: http://www.djcxy.com/p/92197.html