【问题标题】:Is it possible to use ConcurrentHashmap compute with java 7 source level?是否可以在 Java 7 源代码级别使用 ConcurrentHashmap 计算?
【发布时间】:2018-07-23 06:18:09
【问题描述】:

我们有一个使用 gwt 2.6 的旧项目,因此我们需要使用 -source 1.7 选项进行编译。

使用的 JRE 和 JDK 是 1.8,但编译时使用 1.7 源代码选项。

我们想使用来自 ConcurrentHashMap 的新 compute function,它只能在 java 8 中使用。当使用 eclipse 和 maven 时,一切都编译得很好。另一方面,IntelliJ 正在抱怨。我的问题是,它会起作用还是我们会遇到问题?

这个项目会运行吗?

在 google 中搜索 ConcurrentHashmap 计算、java 8 和源代码级别 1.7 未提供任何信息。

【问题讨论】:

  • 你可能想看看 backport。 Here is a (possibly incomplete) list on wikipedia
  • 如果您想在那个旧项目中使用 Java 8 功能,最好先升级到新版本的 GWT。见stackoverflow.com/questions/15693169/java-8-support-in-gwt
  • 您可以做的最简单的事情是将default compute 方法的实现从ConcurrentMap 接口复制到一个新的静态方法中,并为CHM 实例添加一个额外的ConcurrentMap 参数操作。不如 CHM 中的定制实现高效,但至少在功能上是等效的。
  • 我尝试将生成的 jar 部署到 jre8 上,到目前为止一切正常。我只需要注意它不会到达获取部分。但我同意它可能很快就会崩溃
  • JRE8?你是说你7?此外:我很欣赏你的快速回归!

标签: java intellij-idea java-8


【解决方案1】:

如果有的话,这将需要大量仔细的“手动”工作。

例如,当您查看question 时,您会发现人们希望使用 Java 7 启用“基于流”的函数式编程有各种不同的想法。也许,经过大量研究后,您 可能能够找到有关此类“增强收集”功能的类似内容。

但是,所有这些都可能非常脆弱。一些示例可能运行良好这一事实并不意味着您可以在 Java 7 VM 上运行大型生产代码库。

因此这里更多的是非答案:小心如何投入您的时间和精力。与其尝试将库向后移植到 Java 7,不如考虑至少将整个项目迁移到 Java8。尤其要记住,Java 的发布节奏发生了显着变化,与几年前相比,使用多年过时的 Java 版本简直更不可取。

【讨论】:

    【解决方案2】:

    嗯,简单的答案是它不起作用。目标运行时不会有更新的 API(即,compute*** 方法不会在 Java 7 的Map 版本上)。

    因此,如果您部署该代码,运行时将理解类版本,但会引发 NoSuchMethodError 和类似错误。

    除此之外,升级运行时还有很多原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2022-06-13
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多