O objetivo é escrever código java que detecta a versão da JVM confiando em alterações de compatibilidade, efeitos colaterais, bugs e / ou comportamento indefinido que funcionam de uma maneira em uma versão e outra em outra versão. Além disso, o código deve ser pelo menos um pouco legível, sem sacrificar espaços em branco e nomes de variáveis legíveis.
Para garantir esse objetivo, as regras formais exatas são:
O código deve ser escrito em java e deve gerar a versão do JRE na qual está sendo executado.
O código não deve usar nenhuma API JDK ou JRE fornecida especificamente para detectar a versão java ou que fornece a versão JDK ou JRE gratuitamente.
O código não deve usar reflexão.
O código é necessário apenas para funcionar no Hotspot Java SE 5, 6 e 7, mas pode funcionar em outras JVMs.
O código não deve usar nenhuma biblioteca de terceiros no caminho de classe.
O código não deve iniciar nenhum outro processo, java ou não.
O código não deve usar variáveis de ambiente.
O código não deve procurar no sistema de arquivos procurando arquivos ou pastas preexistentes.
O código deve estar contido em um único arquivo e ser chamado via
public static void main(String[] args)
oupublic static void main(String... args)
.O código não deve usar nenhuma API não pública presente no JRE.
O código não deve gerar nenhum NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException ou NoSuchMethodException durante sua execução.
O código deve ser executado em um sistema desconectado da Internet ou de qualquer rede local.
Você deve fornecer uma explicação de por que ele se comporta de uma maneira em uma versão e de outra maneira em outra versão.
Pontuação
O método usado para medir a melhor solução é max (n / s), em que n é o número de versões java diferentes detectadas sem violar nenhuma dessas regras (pelo menos as versões 5, 6 e 7) e s é o número de tokens lexicais na solução.