首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedHashMap签名

LinkedHashMap签名
EN

Stack Overflow用户
提问于 2010-08-09 17:50:27
回答 6查看 346关注 0票数 9

查看LinkedHashMap的JDK源代码,我注意到这个类被声明为:

代码语言:javascript
复制
 public class LinkedHashMap<K,V>
       extends HashMap<K,V>
       implements Map<K,V>
   {...

为什么要使用冗余的"implements Map<K,V>“(既然HashMap已经实现了Map)?我无法想象这是一个打字错误...

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-09 18:00:51

我想这是一种表达方式

无论HashMap实现什么接口(现在或将来),该类都应该实现映射接口。

如果某个负责HashMap的人决定不再实现映射接口,编译器将警告LinkedHashMap的维护者,它不再按照他的意图实现映射接口。

当然,在这种特殊情况下这是愚蠢的(HashMap显然总是一个映射),但类似的情况可能会从这种约定中受益(并导致)。

票数 11
EN

Stack Overflow用户

发布于 2010-08-09 18:21:19

这是古老的密码。在JDK 1.1.6左右的某个时候,Javadoc没有显示继承的接口,因此在派生类中重复它们是惯例,甚至是必要的,以使Javadoc正常工作。它们是在JDK 1.2中引入的,但在此之前很久就作为1.1.x的附加组件提供了。

票数 3
EN

Stack Overflow用户

发布于 2010-08-09 17:57:55

这看起来像是风格/代码约定: LinkedHashSet有类似的签名。也许这仅仅是为了强调界面的使用。与c++相比,使用所有虚拟函数编写“虚拟”是一种好的做法,即使它们已经是隐式虚拟的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3438864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档