当前位置: 首页 > 知识库问答 >
问题:

源和目标兼容性有什么区别?

袁鸿雪
2023-03-14

在使用Java编译器(javac)时,我们可以指定两种兼容性。一个是使用源代码,另一个是使用目标代码。这两者有什么区别?

例如,-源1.5-目标1.6

此外,是否存在使用不同源和目标兼容性级别的情况?


共有3个答案

洪浩波
2023-03-14

这对于生成使用旧版本Java的jar文件非常有用。我相信到目前为止,所有的JDK都能够执行旧版本,所以并没有真正的理由让目标比源代码大。

然而,当使用1.7 JDK时,将目标设置为1.6是有意义的。

我不确定,但我相信在某些情况下可以使用1.7编译器将1.7 java代码编译为1.6 jar,例如表达式,例如

ArrayList<Integer> foo = new ArrayList<>();

仅在1.7源版本中有效的应编译为1.6兼容字节码。但我还没有验证编译器是否真的会这样做。不幸的是,这似乎没有在实践中得到实施。

蒙胤
2023-03-14

源代码表明了源代码的合规性级别:您在使用注释吗?那么你至少需要1.5;如果在接口实现中使用覆盖,则需要1.6等

目标指定了您希望能够运行类的Java版本。您可以使用Java SE 7编译器并编译以在Java SE 1.5上运行。

乌灿
2023-03-14

来自javac文档:

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

-目标生成以VM的指定版本为目标的类文件。类文件将在指定的目标和更高版本上运行,但不会在VM的早期版本上运行。

在您的示例中:

-source 1.5 and -target 1.6

这将用于确保源代码与JDK 1.5兼容,但应该生成类文件以在JDK 1.6及更高版本上使用。

你为什么要这么做是另一回事。

 类似资料:
  • 我目前正在使用gradle,似乎可以通过java插件设置sourcecompatibility和targetcompatibility 我想知道除了与旧的JDK向后兼容之外,我们使用sourcecompatibility/targetcompatibility的原因是什么? 如果没有设置sourcecompatibility/targetcompatibility,升级到最新的java会更容易吗?

  • 问题内容: 使用Java编译器()时,我们可以指定两种兼容性。一个正在使用,另一个正在使用。两者有什么区别? 例如和? 另外,在任何情况下我们使用不同的源和目标兼容性级别吗? 问题答案: 从javac文档: -source 指定接受的源代码版本。 -target 生成针对指定版本的VM的类文件。类文件将在指定的目标和更高版本上运行,但不会在VM的早期版本上运行。 在您的示例中: 这将用于确保源代码

  • 我找不到任何关于什么Java版本可以用于Android Gradle“源兼容性”和“目标兼容性”的选择的信息。 我可以获得当前的Java JDK路径,比如:'c://Program Files/Java/jdk1.7.0_45'到'1.7',那么选择是'1.7'还是'1.6'? 或者,如果您有一个到'1.8'的路径:'1.8'、'1.7'和'1.6'? 我如何确定哪些选择是可用的? 谢了!

  • 从这个问答中,我尝试了不同的解决方案,但没有一个奏效。 这里是顶层建筑。Gradle: 我试图在子项目中提高源代码的兼容性,但似乎没有效果。 子项目包含使用来自Java8的API的每个类,使用Java6的子项目预计会失败,但构建成功运行。 下面是父build.gradle文件: 父设置的内容。Gradle: 它是gradle.properties: 我正在打印和,它们对每个项目都有很好的值。 我正

  • 我在gradle文件中的当前配置是 这个规范使我的项目特定于Java1.7。 我的要求是我应该能够为不同的java版本构建我的项目,比如Java1.7和Java1.8 PS:就像gradle中的概要文件构建一样,我们可以指定不同的java版本。

  • 问题内容: 据我了解,ng-model可以为分配模型的那个特定元素设置值。鉴于ng值与ng-model有何不同? 问题答案: 它与ng-model结合使用;对于radios和selects,是选择该项目时设置为ng- model的值。用它替代元素的“值”属性,该属性将始终将字符串值存储到关联的ng-model。 在单选按钮的上下文中,它允许您使用非字符串值。例如,如果您有单选按钮“是”和“否”(或