qual é a diferença entre compatibilidade entre -source e -target?

Ao usar o compilador Java ( javac ), podemos especificar dois tipos de compatibilidade. Uma está usando -source e a outra está usando -target . Qual é a diferença entre esses dois?

Por exemplo, -source 1.5 e -target 1.6 ?

Além disso, há algum caso em que usamos um nível diferente de compatibilidade de origem e destino?

Dos documentos do javac :

-source Especifica a versão do código-fonte aceito.

-target Gera arquivos de class que visam uma versão especificada da VM. Arquivos de class serão executados no destino especificado e em versões posteriores, mas não em versões anteriores da VM.

No seu exemplo:

 -source 1.5 and -target 1.6 

Isso seria usado para garantir que o código-fonte seja compatível com o JDK 1.5, mas deve gerar arquivos de class para uso no JDK 1.6 e posterior.

Por que você faria isso é outra questão.

A fonte indica qual nível de conformidade seu código-fonte tem: você está usando Anotações? Então você precisaria de pelo menos 1.5 ; você está usando @override em implementações de interface, você precisaria de 1.6 etc

O -target especifica em qual versão do Java você deseja poder executar suas classs. Você poderia usar um compilador Java SE 7 e compilá-lo para rodar no Java SE 1.5 .

Isso é útil principalmente para produzir um arquivo jar trabalhando com uma versão mais antiga do Java. Eu acredito que até agora todos os JDKs também são capazes de executar versões mais antigas, então não há razão real para ter um alvo maior que a fonte.

Entretanto, faz sentido definir o target para, por exemplo, 1,6 ao usar um 1.7 JDK.

Não tenho certeza, mas acredito que poderia funcionar em algumas situações para compilar um código java 1.7 usando um compilador 1.7 para um jar 1.6, por exemplo, expressões como

 ArrayList foo = new ArrayList<>(); 

que só são válidos em 1.7 + versão de origem devem compilar a 1.6 código de byte compatível. Mas eu não verifiquei se o compilador realmente fará isso. Infelizmente, isso não parece ser implementado na prática.

Intereting Posts