什么是-source和-target兼容性之间的区别?(what's the differe

2019-06-24 14:03发布

当使用Java编译器( javac ),我们可以指定2种兼容性。 一种是使用-source ,另一种是用-target 。 什么是这两者之间的区别?

例如, -source 1.5-target 1.6

此外,有没有在这里我们使用不同的源和目标兼容级别的任何情况下?

Answer 1:

从javac的文档 :

-source指定接受的源代码版本。

-target生成靶向VM的指定版本的类文件。 类文件将在指定的目标和更高版本上运行,而不是在早期版本的虚拟机。

在您的例子:

-source 1.5 and -target 1.6

这将被用来确保源代码是与JDK 1.5兼容的,但应该在JDK 1.6和更高版本生成的类文件中使用。

挺你为什么会做,这是另一回事。



Answer 2:

-source表明你的源代码有什么级别的合规性:您使用的注解? 然后,你将需要至少1.5 ; 您使用@override上的接口实现,就需要1.6

-target指定要能够在运行的类什么的Java版本。 你可以使用Java SE 7的编译器和编译,以在Java SE运行1.5



Answer 3:

这主要适用于生产一个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兼容的字节码。 但是,我还没有验证编译器是否会真正做到这一点。 不幸的是,这似乎并没有在实践中实现。



文章来源: what's the difference between -source and -target compatibility?