Java中的AbstractSet中的Equals方法

时间:2016-03-23 18:25:45

标签: java

我很想知道equalsAbstractSet方法将对象o转换为Collection而不是Set的原因。如果它转换为Set,考虑到Set的所有实现类直接或间接地从AbstractCollection继承,它将没有任何区别。这有什么具体原因吗? Link

1 个答案:

答案 0 :(得分:2)

  1. 假设没有语义差异,你是正确的。在演员表而不是Collection中使用Set可能是由于使用最不具体类型的原则 - 与您在Set<Foo> fooSet = new HashSet<>();等声明中看到的原则相同。只需要来自Collection的方法,因此我们会转换为Collection。但是,这是一个无法实现的细节,并未由JLS定义。

  2. (已删除的问题)接口仅表明在所有实现中都应存在某些行为(方法)。如果一个类扩展了一个提供此行为以及实现接口的抽象类,那么这很好,因为该类具有所需的行为。它的实际实现源自抽象类。