加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:36:54 所属栏目:Java 来源:网络整理
导读:我正在尝试确定是否需要在构建链中重新编译一些jar,如果我有以下结构,jar 1在其源更改时编译,jar 2在其源更改或jar 1重新编译时编译. 罐子1: public class Foo /* impl*/ 罐子2: public class Bar extends Foo /*impl*/ 假设两个类之间的合同没有改变,即.
我正在尝试确定是否需要在构建链中重新编译一些jar,如果我有以下结构,jar 1在其源更改时编译,jar 2在其源更改或jar 1重新编译时编译.

罐子1:

public class Foo /* impl*/

罐子2:

public class Bar extends Foo /*impl*/

假设两个类之间的合同没有改变,即.添加抽象方法或将方法添加到接口等.

我需要重新编译jar 2吗?即.如果对Foo中的私有方法进行了一些更改,Bar需要重新编译吗?

我尝试通过比较两个类的字节码来测试这个,在一个中更改一堆并且正如预期的那样它没有改变.然而,我的同事坚持认为他们遇到过这样的情况:即使合同没有变更,他们也必须重新编译一切才能工作,但是他们不记得原因是什么……所以举证责任在我身上证明了这不应该是必要的.是否存在对超类进行更改将需要重新编译子类的情况,即使两者之间的接口保持不变?

解决方法

假设Foo由一个开源组织发布;并且有各种公司实施的数千个Foo子类.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读