【问题标题】:Purpose of creating NavigableInterface?创建 NavigableInterface 的目的是什么?
【发布时间】:2018-01-31 13:14:54
【问题描述】:

为什么NavigableMap 接口是用额外的方法定义创建并用SortedMap 扩展的,而他们本可以在SortedMap 接口中添加它并像往常一样在TreeMap 中实现它们?

互联网上充斥着各种答案,这些答案都是为了在地图上导航而提供的。这里的导航是什么意思?

【问题讨论】:

    标签: java collections treemap sortedmap


    【解决方案1】:
    1. SortedMap 接口已经发布(从 1.2 开始)。这意味着可能有成百上千的课程依赖于SortedMap。如果您在 1.6 中向 SortedMap 添加新方法,而不提供 default 方法实现,这将破坏所有实现 SortedMap 的类。鉴于如此多的东西依赖于 Java,这将从字面上破坏地球上的一切。我希望很明显,“不破坏整个星球上的一切”是一个足够好的理由,不随意添加一些晦涩的方法(这显然是对实际情况的过度戏剧化和半开玩笑的描述如果 Java 标准库的维护者这样做了,那么没有人会使用新版本,并且可能有人会提交错误报告,就是这样)
    2. 文档清楚地说明了“导航”的含义:

    方法lowerEntry、floorEntry、ceilingEntry和higherEntry

    https://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html

    这意味着您不仅可以查找和遍历,还可以找到与请求的键“接近”的条目。

    【讨论】:

      【解决方案2】:

      我不会谈论NavigateMap 有什么用途,但就为什么SortedMap 接口没有修改而不是添加新接口而言;那是因为它会破坏现有的实现。正如您所指出的,TreeMap 等可以更新以实现新方法,但是SortedMap 的自定义实现呢?因此,任何升级到 JRE 1.6+ 的遗留代码都需要搜索代码库并实现这些新方法,但 Java 宣称自己是向后兼容的(至少在添加 NavigateMap 时对于 Java 6)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2010-10-22
        • 2012-02-25
        • 2012-04-21
        相关资源
        最近更新 更多