変更されたAPIに関する実際の問題が発生しました。そして、私はこのトピックについてもっと知りたいです。次の例をデモとして使用します。
4つの単純なクラスがあり、ChildクラスはParentを拡張します。PubAPIは、cientで使用するためのパブリックメソッドを提供するクラスです。クライアントクラスは、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にありますが、「Client」クラスを再コンパイルせず、バージョン1で生成されたクラスファイルを使用する場合。ITはJavaランタイムで失敗し、バージョン1のメソッドが見つからないというエラーが発生します(リターンタイプが変更されたため)。
私はこれまで知りませんでした。たとえば、パブリックAPIがスローを追加したり、同期を追加したり、クラスが最終的になったりするなど、誰かがこのトピックについてもっと知っているかどうかを知りたいです。このような状況では、どのようになりますかそれはhehave。
全体として、他の人が使用するAPIクラスのパブリックAPI/クラスバイトコードレベルの互換性ルールは何ですか。
ありがとう。