目的是编写Java代码来检测JVM版本,该代码依赖于兼容性更改,副作用,错误和/或未定义行为,这些行为在一个版本中以某种方式起作用,而在另一版本中以另一种方式起作用。此外,该代码应至少具有一点可读性,而不会牺牲空格和清晰的变量名。
为了确保这一目标,确切的正式规则是:
该代码必须用Java编写,并输出运行它的JRE版本。
该代码不得使用任何专门用于检测Java版本或免费提供JDK或JRE版本的JDK或JRE API。
该代码不得使用反射。
该代码仅在Hotspot Java SE 5、6和7中才需要,但在其他JVM中也可以。
该代码不得在类路径中使用任何第三方库。
该代码不得启动任何其他进程,无论是否是Java。
该代码不得使用环境变量。
该代码不得搜索文件系统以查找预先存在的文件或文件夹。
该代码必须包含在一个文件中,并通过
public static void main(String[] args)
或调用public static void main(String... args)
。该代码不得使用JRE中存在的任何非公共API。
该代码在执行期间不得生成任何NoClassDefFoundError,NoSuchMethodError,ClassNotFoundException或NoSuchMethodException。
该代码应在与Internet或任何本地网络断开连接的系统中运行。
您应该提供一个解释,说明为什么它在一个版本中会以一种方式运行,而在另一个版本中会以另一种方式运行。
计分
衡量最佳解决方案的方法是max(n / s),其中n是在不违反任何这些规则的情况下检测到的不同Java版本的数量(至少是版本5、6和7),而s是词汇标记的数量在解决方案中。