【发布时间】:2023-04-07 09:56:01
【问题描述】:
我刚刚遇到一个关于更改 API 的真正问题。我想更多地了解这个话题。 使用以下示例作为演示。
有 4 个简单的类,子类扩展了父类。 PubAPI 是提供公共方法以供使用的类。客户端类调用 PubAPI 的公共方法。
public class Parent
{
}
public class Child extends Parent
{
}
public class PubAPI
{
public Parent getChild(){
return new Child();
}
}
public class Client
{
public static void main(String[] args)
{
System.out.println(new PubAPI().getChild());
}
}
前3类是API厂商提供的,假设上面的版本是版本1。
在版本 2 中,PubAPI 类更改为返回子类型:
public class PubAPI
{
public Child getChild(){
return new Child();
}
}
第 3 个 API 提供程序类现在位于第 2 版中,而如果我们不重新编译“客户端”类并使用其第 1 版生成的类文件。 IT 将在 java 运行时失败,并出现错误找不到版本 1 方法(因为返回类型更改)。
我以前不知道,我想知道是否有人对此主题有更多了解,例如,公共 API 是否添加了 throw,或添加了 synchronize 或类变为 final 等。在这些情况下,他会怎么样。
总之,其他人使用的 API 类的公共 API/类字节码级别兼容性规则是什么。
谢谢。
【问题讨论】:
-
将您的编辑器设置为使用空格而不是制表符,以便缩进在此处正确显示。
标签: java bytecode binary-compatibility