您好我正在编写一个Java类,它在使用java7向上编译时启用了一些功能。 我知道如何从编译的类文件中找到主要/次要幻数。但是我需要找到一种方法来检测编译器编译源代码时的情况。 一个简单的代码片段: ```
public class Hey
{
public static final boolean JAVA_VER = ???; // how to do this??
public static foo() {
if (JAVA_VER >= JAVA7) {
// use the fancy way introduced in java7
} else {
// go with the slow way of java6
}
}
}
```
答案 0 :(得分:0)
编译期间不执行代码。在编译期间,检查语法错误并将其转换为.class文件中的字节代码。代码行可以在运行时执行,因此您可以在代码中找到的唯一内容是Java运行时版本。可以使用java.version系统属性找到Java运行时。这是代码:
String version = System.getProperty("java.version");
如果要检查java编译器版本,可能那么您可以使用脚本来编译代码。也许你可以有两个不同版本的文件,每个版本适用于一个特定的java版本。在您的脚本中检查可用的Java版本并编译所需的文件版本。您可能希望使用单输出公共输出目录。
答案 1 :(得分:0)
这应该是不可能的。编译器要求运行代码的JVM与正在运行的代码具有相同的版本 - 实质上,您无法为较低版本编译它,因为较高版本的代码需要更高版本的编译器。
如果你能解决这个问题,我可能会像前面提到的那样打包一个脚本,或者通过执行字节代码转储(指定主要/次要版本)以编程方式在引导程序中执行,或者使用Process或来自文件字节的源解码。