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

前端之家收集整理的这篇文章主要介绍了如果父类/接口发生变化,类的字节码是否会发生变化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试确定是否需要在构建链中重新编译一些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

原文链接:https://www.f2er.com/java/121932.html

猜你在找的Java相关文章