本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
Java中的二进制兼容性是什么?
我正在阅读Joshua Bloch撰写的Effective Java。
在17节,我遇到了不建议使用接口存储常量的解释。 我在下面说明。
“更糟糕的是,它代表着一种承诺:如果在将来的发行版中对该类进行了修改,以使其不再需要使用常量,则它仍必须实现该接口以确保二进制兼容性。”
二进制兼容性在这里意味着什么?
是否有人可以用Java的示例指导我,以证明什么代码是二进制兼容的。
回答1:
简而言之,二进制兼容性意味着更改类时,无需重新编译使用它的类。例如,您从此类中删除或重命名了public或protected的方法
public class Logger implements Constants {
public Logger getLogger(String name) {
return LogManager.getLogger(name);
}
}
复制代码
从您的log-1.jar库中发布后,你发布了一个新版本,即log-2.jar。当log-1.jar的用户下载新版本时,当他们尝试使用被删掉的的getLogger(String name)方法时,应用程序将不能运行。
由于你删除常量接口,由于相同的原因,这也会破坏二进制兼容性。
但是您可以在不破坏二进制兼容性的情况下删除/重命名此类的private或package private成员,因为外部应用程序不能(或不应)使用它。
有点像jAVA编程思想讲的那些,private那部分和上面说的很像。都是以一个jar包开发者的身份去思考问题的。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END