首页 > 解决方案 > 什么是 Java 中的源代码兼容性?

问题描述

我正在阅读各种兼容性,但我无法理解它。有人可以解释一下吗?

从我能够掌握的任何情况来看,源代码兼容性似乎意味着用 X 编写的代码应该能够在 X+1 中编译。

然而,关于方法解析如何工作的更多细节似乎为其添加了更多细节,给人的印象是源兼容性不仅仅是能够在更高版本中编译。

标签: javacompilationjvmbytecode

解决方案


能够使用 X+1 进行编译是源代码兼容性的最简单形式。

您链接到的文章定义了 3 个级别的源兼容性(如果算上“不兼容”,则为 4):

  1. 它仍然编译
  2. 它的编译和行为方式仍与版本 X 相同
  3. 它仍然可以编译,并且可以有效地编译成相同的二进制文件(保留二进制文件)

#1 很明显。

#2 可能会被破坏,因为如果您的库版本 X 有一个方法foo(Object)并且您的源代码有一行读取,yourObject.foo("someString")那么如果 X+1 添加了一个方法foo(String),那么针对 X+1 进行编译会将该方法绑定到新方法而不是旧方法。

如果调用with 与调用foo(Object)with"someString"具有相同的效果foo(String)"someString"那么 #2 仍然适用,因为它们产生相同的行为。

#3 是关于那个特定的区别:如果你的源现在会调用另一个方法,那么这个级别就被打破了。如果您想针对较新的库进行编译并仍然针对较旧的版本运行(Android 经常出现这种情况),这可能很重要。


推荐阅读