查看LinkedHashMap的JDK源代码,我注意到这个类被声明为:
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
{...为什么要使用冗余的"implements Map<K,V>“(既然HashMap已经实现了Map)?我无法想象这是一个打字错误...
谢谢。
发布于 2010-08-09 18:00:51
我想这是一种表达方式
无论HashMap实现什么接口(现在或将来),该类都应该实现映射接口。
如果某个负责HashMap的人决定不再实现映射接口,编译器将警告LinkedHashMap的维护者,它不再按照他的意图实现映射接口。
当然,在这种特殊情况下这是愚蠢的(HashMap显然总是一个映射),但类似的情况可能会从这种约定中受益(并导致)。
发布于 2010-08-09 18:21:19
这是古老的密码。在JDK 1.1.6左右的某个时候,Javadoc没有显示继承的接口,因此在派生类中重复它们是惯例,甚至是必要的,以使Javadoc正常工作。它们是在JDK 1.2中引入的,但在此之前很久就作为1.1.x的附加组件提供了。
发布于 2010-08-09 17:57:55
这看起来像是风格/代码约定: LinkedHashSet有类似的签名。也许这仅仅是为了强调界面的使用。与c++相比,使用所有虚拟函数编写“虚拟”是一种好的做法,即使它们已经是隐式虚拟的。
https://stackoverflow.com/questions/3438864
复制相似问题