当使用Java编译器( javac
),我们可以指定2种兼容性。 一种是使用-source
,另一种是用-target
。 什么是这两者之间的区别?
例如, -source 1.5
和-target 1.6
?
此外,有没有在这里我们使用不同的源和目标兼容级别的任何情况下?
当使用Java编译器( javac
),我们可以指定2种兼容性。 一种是使用-source
,另一种是用-target
。 什么是这两者之间的区别?
例如, -source 1.5
和-target 1.6
?
此外,有没有在这里我们使用不同的源和目标兼容级别的任何情况下?
从javac的文档 :
-source指定接受的源代码版本。
-target生成靶向VM的指定版本的类文件。 类文件将在指定的目标和更高版本上运行,而不是在早期版本的虚拟机。
在您的例子:
-source 1.5 and -target 1.6
这将被用来确保源代码是与JDK 1.5兼容的,但应该在JDK 1.6和更高版本生成的类文件中使用。
挺你为什么会做,这是另一回事。
该-source
表明你的源代码有什么级别的合规性:您使用的注解? 然后,你将需要至少1.5
; 您使用@override
上的接口实现,就需要1.6
等
该-target
指定要能够在运行的类什么的Java版本。 你可以使用Java SE 7
的编译器和编译,以在Java SE运行1.5
。
这主要适用于生产一个jar文件中使用旧版本的Java的工作。 我认为,到目前为止,所有的JDK都能够过执行旧版本,所以没有真正的理由有目标比源大。
然而,这确实是有意义的设定target
使用JDK 1.7时,如1.6。
我不知道,但我相信它可以工作在一些情况使用1.7编译器1.6罐子编译一个1.7的Java代码,例如表达式如
ArrayList<Integer> foo = new ArrayList<>();
这是只有在1.7+源版本有效应编译1.6兼容的字节码。 但是,我还没有验证编译器是否会真正做到这一点。 不幸的是,这似乎并没有在实践中实现。