Compilação condicional de Java: como impedir a compilação de trechos de código?

Meu projeto requer Java 1.6 para compilação e execução. Agora eu tenho um requisito para fazê-lo funcionar com Java 1.5 (do lado do marketing). Desejo substituir o corpo do método (o tipo e os argumentos de retorno permanecem os mesmos) para compilá-lo com o Java 1.5 sem erros.

Detalhes: Eu tenho uma classe de utilidade chamadaOS que encapsula todas as coisas específicas do sistema operacional. Tem um método

public static void openFile(java.io.File file) throws java.io.IOException {
  // open the file using java.awt.Desktop
  ...
}

para abrir arquivos como com um clique duplo (start Comando do Windows ouopen Equivalente ao comando do Mac OS X). Como ele não pode ser compilado com o Java 1.5, desejo excluí-lo durante a compilação e substituí-lo por outro método que chamarun32dll para Windows ouopen para Mac OS X usandoRuntime.exec.

Pergunta: Como posso fazer isso? As anotações podem ajudar aqui?

Nota: Eu uso ant, e posso criar dois arquivos javaOS4J5.java eOS4J6.java que conterá oOS classe com o código desejado para Java 1.5 e 1.6 e copie um deles paraOS.java antes de compilar (ou de maneira feia - substitua o conteúdo deOS.java condicionalmente, dependendo da versão java), mas não quero fazer isso, se houver outra maneira.

Elaborando mais: em C eu poderia usarifdef, ifndef, em Python não há compilação e eu pude verificar um recurso usandohasattr ou qualquer outra coisa, no Common Lisp eu poderia usar#+feature. Existe algo semelhante para Java?

Encontradoesta postagem mas não parece ser útil.

Qualquer ajuda é muito apreciada. kh.

questionAnswers(7)

yourAnswerToTheQuestion