Java开发工具包1.7及更早版本兼容性问题

3

我目前正在使用 Java 1.7 标准版进行开发,并且我非常喜欢其中的新特性:

  • Nio(新输入输出)
  • 与集合相比,代码冗余度更低
  • ...

我想知道是否有一种方法可以根据将要部署的 (JRE)Java 运行时环境 的版本来切换要执行的类。


2
你并没有确切地提出问题。你想知道是否有一种方法在执行期间确定JRE版本,然后基于此使用某些功能吗? - ChiefTwoPencils
没错!这就是我想要的。 - william.eyidi
3个回答

2

首先需要创建一个启动器应用程序来检查环境中的JRE版本,然后您可以启动针对该版本的JAR。您的代码不能编译为JRE的更新版本,并在旧版本上执行。这就是为什么您需要针对非常老的JRE编译启动器应用程序。

另外,您可以使用以下方法获取程序正在运行的JRE版本:

System.getProperty("java.version")

可以告诉我更多详情的链接吗? - william.eyidi
2
假设您有两个JAR文件,一个是针对Java 6编译的(MyApp6.jar),另一个是针对Java 7编译的(MyApp7.jar)。在您的启动器应用程序(Launcher.jar)中,它是针对Java 6编译的(或者您希望支持的最低JRE版本),您可以使用以下代码检测系统JRE版本:public static void main(String[] args) { String jarName; if(System.getProperty("java.version").startsWith("1.6")) { jarName = "MyApp6.jar"; } if(System.getProperty("java.version").startsWith("1.7")) { jarName = "MyApp7.jar"; } Process proc = Runtime.getRuntime().exec("java -jar " + jarName); } - Jaec
我会调查一下。 - william.eyidi

2
Java类文件几乎总是与语言的新版本具有二进制兼容性(像在添加关键字“enum”之前使用enum这样的例外情况非常少见)。如果您将特性的使用限制为“最低公共分母”,则可以编译回任意版本。话虽如此,Java 7已经相当老了,我发现Java 8非常稳定。最后,如果您选择使用新的语言特性(例如lambda),则不能使用早期版本的语言。

我想为两个版本编译两个类,然后根据环境识别它是1.8、1.7还是更早的版本,并选择可以执行的类。 - william.eyidi
1
@JeanWilliamEyidi 为什么呢?只需编译到1.7(或1.6),然后它就可以在1.6(和/或1.7)和/或1.8中运行。采用您的方式,您必须为每个语言迭代创建单独的版本,然后必须支持它们。基本上,这是您不想要做的事情。 - Elliott Frisch

1
你可以创建两个编译版本,以便使用不同的语言功能,并在jre 7上运行它们,但是你应该只升级代码兼容性和运行时到1.8(更好)。

好的,我想那是个开始,但是如何根据环境进行切换呢? - william.eyidi
2
在开发阶段手动进行,在运行时环境中,JRE 7 可以执行在 1.6 JDK 编译的代码。 - jmj

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