假设我们有这样的方法:
public void foo (String input) {...}
我们发布这个。然后,我们稍后将其更改为:
public void foo (Object input) {...}
现在,我知道这可能会破坏二进制兼容性 - 一些旧的字节码可能引用旧方法,使用旧签名,并且在运行时不会知道寻找更新,更松散类型的方法。
(至少我认为这是问题的原因)
但是还有一个“源兼容性”概念,我从sigtest获得 - 见2.2.2节。
它说,源兼容性是一种更严格的检查,而不是二进制兼容性。
但是在上面的例子中,我认为使用旧方法编译的任何代码也会使用新方法进行编译。所以从这个意义上来说,即使它不是二进制兼容的,它也是“源兼容的”,从这个意义上说,源兼容性弱而不是二进制兼容性。
或者在我的例子中我错了吗? 是否有Java源代码在进行更改时无法重新编译?