8.3 Java中的二进制兼容性是什么?| Java Debug 笔记

702 阅读1分钟

本文正在参加「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包开发者的身份去思考问题的。