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.