java源码兼容性:为什么松动参数类型会破坏它?

时间:2017-11-02 23:10:54

标签: java backwards-compatibility

假设我们有这样的方法:

public void foo (String input) {...}

我们发布这个。然后,我们稍后将其更改为:

public void foo (Object input) {...}

现在,我知道这可能会破坏二进制兼容性 - 一些旧的字节码可能引用旧方法,使用旧签名,并且在运行时不会知道寻找更新,更松散类型的方法。

(至少我认为这是问题的原因)

但是还有一个“源兼容性”概念,我从sigtest获得 - 见2.2.2节。

它说,源兼容性是一种更严格的检查,而不是二进制兼容性。

但是在上面的例子中,我认为使用旧方法编译的任何代码也会使用新方法进行编译。所以从这个意义上来说,即使它不是二进制兼容的,它也是“源兼容的”,从这个意义上说,源兼容性而不是二进制兼容性。

或者在我的例子中我错了吗? 是否有Java源代码在进行更改时无法重新编译?

0 个答案:

没有答案