我刚刚遇到一个关于更改 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,或者添加了一个同步或类成为 final 等。在这种情况下,将如何他有。
总之,其他人使用的 API 类的公共 API/类字节码级别兼容性规则是什么。
谢谢。