当前位置: 首页 > 面试题库 >

Java中的二进制兼容性是什么?

水飞掣
2023-03-14
问题内容

在项目17:“仅使用接口定义类型”中,我遇到了不建议使用接口存储常量的解释。我在下面说明。

“更糟糕的是,它表示一种承诺:如果在将来的发行版中对该类进行了修改,使其不再需要使用常量,则它仍必须实现该接口以确保二进制兼容性。”

二进制兼容性在这里意味着什么?

有人可以用Java的例子指导我,说明代码是二进制兼容的。


问题答案:

简而言之,二进制兼容性意味着更改类时,无需重新编译使用它的类。例如,您从此类中删除或重命名了公共或受保护的方法

public class Logger implements Constants {
   public Logger getLogger(String name) {
         return LogManager.getLogger(name);
   }
}

从您的log-1.jar库中发布,并发布了新版本的log-2.jar。当log-1.jar的用户下载新版本时,当他们尝试使用缺少的getLogger(Stringname)方法时,它将中断其应用程序。

而且,如果删除常量接口(第17项),由于相同的原因,这也会破坏二进制兼容性。

但是您可以在不破坏二进制兼容性的情况下删除/重命名此类的私有成员或程序包私有成员,因为外部应用程序不能(或不应)使用它。



 类似资料:
  • 问题内容: 我正在使用Lobo-Java Web浏览器 库,但它给了我一个例外,经过一番研究后,我确定这可能是由于该库已与旧版本的Java兼容。 代码如下: 堆栈跟踪为: 当我检查时,发现有一个名为的接口,它与Java的早期版本有所不同。在此类中,他们使用了不再可用的该接口的类。我该如何解决这个问题? 接口: 以及库中不可用的类: 问题答案: 我认为’sun.font.FontManager’已随

  • Java 兼容性 当我们写的Scala代码被Java调用时,我们要确保从Java来用仍然习惯。这常常不需要额外的努力——class和纯的trait等价于Java的中的对应类型 —— 但有时需要提供独立的Java API。一种感受你的库中的Java API好的方式是用Java写单元测试(只是为了兼容性);这也确保了你的库中的Java视图保持稳定,在这一点上不会随着时间因Scala编译器的波动而影响。

  • Android-ndk\toolchains\arm-linux-androideabi-4.4.3对于x86,使用路径:Android-ndk\toolchains\x86-4.4.3有关更多信息,请参见位于Android-ndk/docs/standalone-toolchain.html中的NDK文档。 但是,从这个简短的描述中,我不明白什么是工具链兼容性问题。我想知道是否有人能更详细地向我

  • Restructured and parts updated by Jim Mock. Originally contributed by Brian N. Handy 和 Rich Murphey. 11.1. 概述 FreeBSD 提供了与 Linux® 32-bit 二进制兼容,允许用户在 FreeBSD 系统上安装和运行大多数的 32-bit Linux®二进制程序而无需做任何修改。 据说

  • 问题内容: 我目前正在将应用程序从Java 7迁移到Java 8,并且目前正在运行Spring 3.1.6 jar。这将与Java 8兼容还是我需要升级Spring jar? 我了解到Spring 4x版本自然支持Java 8,但这是时间紧迫的,我正在寻求尽可能少地更改jar的方法。 问题答案: 基本上,Spring 3.x版本最多Java-7仅支持。如果要迁移到Java-8,则应使用Spring

  • 本章提供了有关 版本控制 章节中提供的破坏性和非破坏性修改列表的详细说明。 什么算是一个破坏性(不兼容)的变化并没有明确的定义。本指南应该被视为指示性的,而不是每一种可能变化的全面清单。 这里列出的规则只涉及客户端兼容性。预期API生产者明白在部署方面的要求,包括实现细节的变化。 一般目的是,服务端更新到一个新的minor版本或patch版本不该破坏客户端。可预期的破坏类型有: 源代码兼容性:针对