繁体   English   中英

如何在Java中定位较低的语言级别

[英]How to target a lower language level in Java

我维护一个用Java编写的Java 教程应用程序 ,它演示了Java 6,7和8的功能。每个教程屏幕都是根据需要由Class.forName动态加载的。 Java 7类需要使用Java 7构造,Java 8类需要使用Lambdas和Date / Time API。

我希望所有这三种语言级别的用户都可以访问它,只是如果它们在Java 6上,我们就不会加载Java 7或8类,如果在7上,我们就不会加载Java 8类。

我们将动态确定运行时级别并忽略更高级别,仅通过Class.forName()加载相关类。 显然,使用Java 6或7的用户将无法执行幻数为8的代码。所以我想在构建中定位早期的Java版本。

换句话说,我想将source设置为1.8并将目标设置为1.6

然而,Maven(和Javac)阻止我指定低于源的目标。

还有其他方法吗?

我在过去使用Android的JavaFX代码完成了这项工作,我可以使用Lambdas构建JavaFX 8代码,然后将其部署到当前的Android版本。 但在这种情况下,有一个特殊的SDK处理lambda并构建到Java 7。

有没有办法用标准的Java 8做到这一点?

你唯一的选择是-source 1.1 -target 1.0在所有其他情况下,它们必须是相同的

您需要为每个版本构建一个jar,并将另一个版本组合在一起。

您将需要制作3个不同的罐子,每个版本对应一个版本,其中较高版本包含更多代码示例。 (好的一面,你只需多次重新编译java 6和7代码)

对于每个jar,将-target代码分别设置为6,7或8。 您也可以选择使用-source参数并将其设置为相同的值,但我认为您不需要,除非您担心您不小心放入了以后的语言功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM