java - 什么是 Java 中的源代码兼容性?
问题描述
我正在阅读各种兼容性,但我无法理解它。有人可以解释一下吗?
从我能够掌握的任何情况来看,源代码兼容性似乎意味着用 X 编写的代码应该能够在 X+1 中编译。
然而,关于方法解析如何工作的更多细节似乎为其添加了更多细节,给人的印象是源兼容性不仅仅是能够在更高版本中编译。
解决方案
能够使用 X+1 进行编译是源代码兼容性的最简单形式。
您链接到的文章定义了 3 个级别的源兼容性(如果算上“不兼容”,则为 4):
- 它仍然编译
- 它的编译和行为方式仍与版本 X 相同
- 它仍然可以编译,并且可以有效地编译成相同的二进制文件(保留二进制文件)
#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 经常出现这种情况),这可能很重要。
推荐阅读
- php - public_html 问题上方的 fopen/fwrite 路径
- c++ - 调用 notify_all() 时线程未唤醒
- javascript - Javascript 范围:回调函数抛出“今天不是函数”
- cmake - CMake 不能跟随符号链接
- python-3.x - “预期有缩进块”错误,但有一个缩进块
- dotfuscator - Dotfuscator - ${configuration} ${platform} 在 VS 类库项目中为空
- css - 我的位置多了 30px
- javascript - 当用户更改选项卡并返回时,停止触发事件侦听器
- javascript - 有没有办法让链接打开另一个页面上的选项卡 - 链接标识为“按钮”?
- mysql - MySQL 创建存储函数语法问题