gpt4 book ai didi

java - 为什么 NavigableSet (扩展了 SortedSet)再次声明 subSet(E fromElement, E toElement) ?

转载 作者:行者123 更新时间:2023-11-30 04:52:03 26 4
gpt4 key购买 nike

interface NavigableSet<E>延伸interface SortedSet<E>它声明了该方法 SortedSet<E> subSet(E fromElement, E toElement) 。然而,当我查看NavigableSet's API时,我看到它声明了相同的方法(具有完全相同的签名)。我还看到它说它继承了 SortedSet 的一些方法(第一个、最后一个、可比较的) .

既然根据定义,接口(interface)只包含方法签名,为什么任何子接口(interface)都会重新声明父接口(interface)已经声明的相同方法(并且在 API javadoc 中语义上没有区别)?

编辑:在这里遇到了相关且很好的讨论 - In Java when one interface extends another, why would one redeclare a method in a subinterface?

最佳答案

Java 中当然允许这样做。

这是源代码:

/**
* {@inheritDoc}
*
* Equivalent to {@code subSet(fromElement, true, toElement, false)}.
*/
public SortedSet<E> subSet(E fromElement, E toElement)

也许该类的作者发现值得重复定义,因为 subSet 有一个第二个定义,它返回一个 NavigableSet,因此,将两者并排显示在 Javadoc 列表中比一个出现在主方法列表中一个出现在“继承”部分中要好。

肯定没有充分的理由对 firstlast 执行此操作,因此没有这样做。

以下是 Javadocs 中添加第二个版本的 subSet、headSet 和 tailSet 的基本原理:

Methods subSet(E, E), headSet(E), and tailSet(E) are specified to return SortedSet to allow existing implementations of SortedSet to be compatibly retrofitted to implement NavigableSet, but extensions and implementations of this interface are encouraged to override these methods to return NavigableSet.

您可能希望尝试自己的实验,设计几个接口(interface),一个接口(interface)继承另一个接口(interface),并在子接口(interface)中添加继承方法的新版本,以查看是否有必要重新指定。 :-)

关于java - 为什么 NavigableSet (扩展了 SortedSet)再次声明 subSet(E fromElement, E toElement) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9644472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com