gpt4 book ai didi

java - 如果父类/接口(interface)发生变化,类的字节码是否会发生变化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:54 24 4
gpt4 key购买 nike

我正在尝试确定是否需要重新编译构建链中的某些 jar,如果我有以下结构,jar 1 在其源更改时编译,jar 2 在其源更改或 jar 时编译1 已重新编译。

jar 1:

public class Foo /* impl*/

jar 2:

public class Bar extends Foo /*impl*/

假设两个类之间的契约没有改变,即。添加抽象方法或将方法添加到接口(interface)等。

我需要重新编译 jar 2 吗? IE。如果对 Foo 中的私有(private)方法进行了一些更改,是否需要重新编译 Bar?

我尝试通过比较两个类的字节码来测试这个,在一个类中更改了一堆之后,正如预期的那样,它没有改变。然而,我的同事坚持认为他们遇到过这样的情况,即使契约(Contract)没有改变,他们也必须重新编译所有内容才能使其正常工作,但他们不记得原因是什么......所以举证责任在我身上证明那应该没有必要。 是否存在这样一种情况,即更改父类(super class)将需要重新编译子类,即使两者之间的接口(interface)保持不变?

最佳答案

假设 Foo 是由开源组织发布的; Foo 有数以千计的子类,由不同的公司实现。

现在,如果对 Foo 进行了一些更改,并且以二进制形式发布了新版本,所有公司都应该重新编译他们的代码吗?当然不是。 (好吧,我们一直都在重新编译所有代码,但这不是必需的 - Foo 的新 jar 可以简单地放入而不会导致任何问题)

这是二进制兼容性问题,您可以检查规范以确保对 Foo 的更改是安全的。见http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html

关于java - 如果父类/接口(interface)发生变化,类的字节码是否会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15097041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com