2017-08-11 114 views

回答

4

Collection JavaDoc

虽然 的Collection接口增加了不规定合同 一般为Object.equals,谁落实Collection 接口“直接”(即程序员,创建一个类,是 Collection但不是SetList)必须小心,如果他们 选择覆盖Object.equals。没有必要这样做, ,最简单的方法是依靠Object的 实现,但实现者可能希望实现“值 比较”来代替默认的“参考比较”。 (该ListSet接口任务这样的值的比较。)

为等于 必须是对称的Object.equals方法状态的一般合同(换句话说,a.equals(b)当且仅当 b.equals(a))。 List.equalsSet.equals的合同规定 列表仅与其他列表相同,并设置为其他集合。因此,对于既不实现 List也不实现Set接口的集合类的自定义等于方法必须返回false,此集合是 与任何列表或集合相比较。 (通过相同的逻辑,这是不可能的 编写正确的同时实现Set和List 接口的类。)

虽然Collection接口没有增加规定向一般Object.hashCode方法的合同,程序员应该注意,任何覆盖Object.equals方法的类都必须覆盖Object.hashCode方法,以满足Object.hashCode方法的一般合同。特别是,c1.equals(c2)意味着c1.hashCode()==c2.hashCode()

1

要回答你的具体问题:为什么它有这些方法?这只是为了方便起见,可以包含Java Docs,提供关于实现者应该如何处理这些方法的提示(例如比较值的相等而不是引用)。

0

当任何类实现接口时,它会注入/接受由接口定义的合约/规则。

Equalable & Hashable是两个默认提供的合同/规则。通过这样做假设给定类的equals和hashCode对该类是正确实现的。

相关问题