El objetivo es escribir código java que detecte la versión JVM basándose en cambios de compatibilidad, efectos secundarios, errores y / o comportamiento indefinido que funcione de una manera en una versión y otra en otra. Además, el código debe ser al menos un poco legible, sin sacrificar espacios en blanco y nombres de variables legibles.
Para garantizar ese objetivo, las reglas formales exactas son:
El código debe estar escrito en Java y debe mostrar la versión JRE en la que se está ejecutando.
El código no debe usar ninguna API JDK o JRE proporcionada específicamente para detectar la versión de Java o que proporciona la versión JDK o JRE de forma gratuita.
El código no debe usar la reflexión.
El código solo es necesario para trabajar en Hotspot Java SE 5, 6 y 7, pero puede funcionar en otras JVM.
El código no debe usar ninguna biblioteca de terceros en el classpath.
El código no debe iniciar ningún otro proceso, java o no.
El código no debe usar variables de entorno.
El código no debe buscar en el sistema de archivos en busca de archivos o carpetas preexistentes.
El código debe estar contenido en un solo archivo y debe invocarse mediante
public static void main(String[] args)
opublic static void main(String... args)
.El código no debe usar ninguna API no pública presente en el JRE.
El código no debe generar ningún NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException o NoSuchMethodException durante su ejecución.
El código debe ejecutarse en un sistema desconectado de Internet o de cualquier red local.
Debe proporcionar una explicación de por qué se comporta de una manera en una versión y de otra en otra.
Puntuación
El método utilizado para medir la mejor solución es max (n / s), donde n es el número de diferentes versiones de Java detectadas sin violar ninguna de estas reglas (al menos las versiones 5, 6 y 7) y s es el número de tokens léxicos En la solución.