能否在Java 7源代码级别上使用ConcurrentHashMap compute方法?

5
我们有一个旧项目,使用gwt 2.6,因此需要使用-source 1.7选项进行编译。所使用的JRE和JDK为1.8,但是使用1.7源代码选项进行编译。
我们想要使用ConcurrentHashMap中的新compute function,该函数仅在java 8中可用。在使用eclipse和maven时,一切都编译得很好。另一方面,IntelliJ却在抱怨。我的问题是,它会工作还是会出现问题?
这个项目会运行吗?
在谷歌上搜索ConcurrentHashmap compute、java 8和source code level 1.7并没有给出任何信息。

你可能想看看backport。这里有一个(可能不完整的)维基百科列表 - Lino
1
如果你想在那个旧项目中使用Java 8功能,最好先升级到更新的GWT版本。请参阅https://dev59.com/H2Uo5IYBdhLWcg3w5Sul - Stephen C
2
你可以做的最简单的事情是将ConcurrentMap接口中默认计算方法的实现复制到一个新的静态方法中,并为CHM实例添加一个额外的ConcurrentMap参数以进行操作。虽然不如CHM中的定制实现高效,但至少在功能上是等效的。 - Sartorius
我已经尝试并部署了生成的jar文件在jre8上,到目前为止一切都正常。我只需要注意它不会到达get部分。但我同意它可能很快就会出现问题。 - David Michael Gang
1
JRE8?你是说你7吧?另外,感谢快速回复! - GhostCat
2个回答

6
如果需要,这将需要大量仔细的“手动”工作。举个例子,当你看这个问题时,你会发现有各种各样的想法,人们想通过Java 7实现“基于流”的函数式编程。也许,在进行了大量研究后,您可能会找到类似“增强集合”功能的东西。但是,所有这些都可能非常脆弱。一些示例能够正常工作并不意味着您能够在Java 7 VM上运行大型生产代码库。因此,更多的是一个非答案:要小心如何投资您的时间和精力。与其尝试将库回退到Java 7,不如考虑将整个项目至少迁移到Java8。特别是要记住,Java的发布节奏已经发生了显着变化,多年使用过时的Java版本比几年前更不可取。

0

简而言之,它不会起作用。目标运行时将没有更新的 API(例如,Java 7 版本的 Map 上没有 compute*** 方法)。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接