gpt4 book ai didi

java - 关于java Runtime自写公共(public)API兼容性

转载 作者:行者123 更新时间:2023-11-30 04:59:12 28 4
gpt4 key购买 nike

我刚刚遇到了一个关于更改 API 的实际问题。我想了解更多关于这个话题的信息。使用以下示例作为演示。

有 4 个简单的类,Child 类扩展 Parent。 PubAPI是提供公共(public)方法供用户使用的类。客户端类调用 PubAPI 的公共(public)方法。

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 中,而如果我们不重新编译“Client”类并使用其版本 1 生成的类文件。 IT 将在 java 运行时失败,并出现错误找不到版本 1 方法(因为返回类型发生变化)。

我以前不知道这一点,我想知道是否有人对这个主题有更多了解,例如,公共(public) API 是否添加了一个 throw,或者添加了一个同步,或者该类变成了final,等等。在这些情况下,他会怎么样。

总而言之,其他人使用的 API 类的公共(public) API/类字节码级别兼容性规则是什么。

谢谢。

最佳答案

编辑:您两周前问了几乎完全相同的问题并接受了答案。我想知道是什么促使您再次询问,您认为规则不会在两周内发生变化,是吗?

使用关键字字节码级别兼容性,您的方向是正确的。它称为二进制兼容性,您可以在网上查找。例如,here

这些规则一开始并不总是容易理解,但当您遇到错误并思考它们时通常会有意义。最好的办法是尝试您列出的个别案例,当您在 JLS 中收到错误时,请确认这是不兼容的,然后尝试为自己合理解释为什么会这样。

This so 的问题似乎讨论了完全相同的问题。 document at eclipse它的网站比 JLS 更容易阅读。

关于java - 关于java Runtime自写公共(public)API兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com