【问题标题】:How to use Java 7 HashMaps in Java 8?如何在 Java 8 中使用 Java 7 HashMap?
【发布时间】:2016-08-16 08:33:45
【问题描述】:

我正在升级依赖于 HashMap 的 Java 7 迭代顺序的应​​用程序。 Java 8 HashMap 改变了它的迭代顺序,这与这个应用程序的一些不兼容(可能是糟糕的设计),我必须使用 Java 7 HashMaps 才能成功地将应用程序迁移到 Java 8。这是我想到的方式:

  1. 制作一个扩展常规 Java 8 HashMap 的 Java7HashMap
  2. 查找Java 7 HashMap的源代码,复制粘贴。
  3. 替换“import java.util.HashMap;”用“import (...).Java7HashMap;”
  4. 彻底测试一切。

这是一个很好的方法吗?不幸的是,重写依赖于 Java 7 版本的 HashMap 的部分不是一种选择。

【问题讨论】:

  • HashMap 没有排序,那么“依赖Java 7 的HashMap 排序方式”是什么意思?
  • 基本上所有较新版本的Java都向后兼容旧版本,我觉得一旦您迁移到Java 8,您应该不会遇到Java 7代码的任何问题。
  • @Simze 除非您依赖未记录的和实现细节,例如在这种情况下(这就是 HashMap 在 Java 7 内部的行为方式)。
  • “很遗憾,重写依赖于 Java 7 版本的 HashMap 的部分是不可行的。”这是为什么?在我看来,这是您应该解决的问题。如果您在说服人们有这种需求时遇到问题,可以在workplace.stackexchange.com 上提问。
  • 您似乎对“将应用程序成功迁移到 Java 8”有一个奇怪的定义。复制 Java 7 JRE 实现实际上意味着迁移到 Java 8...

标签: java hashmap java-8 upgrade java-7


【解决方案1】:

问题不是HashMap,问题是使用HashMap的代码错了! HashMap 不为订单提供任何保证。

更正代码谁用HashMap错了!这使得代码也与 JDK 的更高版本兼容。

【讨论】:

  • 我在这里撒了谎。有可能,我不能在这里详细介绍,但它需要构建一个脚本并运行 24/7 超过 2 个月,以使所有历史数据与 Java 8 实现兼容。我想出了这个方法,并认为它是解决这个问题的可能方法。
【解决方案2】:

是的,你的方法很好。尽管每个人似乎都有一种不足的感觉。但是,您只想更改实现:

Map<Lorem, Ipso> goodMap = new HashMap<>();
HashMap<Foo, Bar> badMap = new HashMap<>();

因此,只需将 new HashMap 替换为 new Java7HashMap 即可找到所有不匹配项,并允许以后合并,例如使用 Comparable 使用更好的密钥。

您可能只需要implement Map of java 8,实际上我什至不会在意缺少 java 8 支持,因为它会照常工作,并且应该提供进一步的开发Java7HashMap 的替代品。更好地在重写上投入时间。 胡萝卜加大棒的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2017-09-30
    • 2017-10-10
    相关资源
    最近更新 更多