[英]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.