メソッドをリファクタリングする場合、Java では (以前のバージョンのコードとの) バイナリ非互換性を簡単に導入できます。
メソッドを変更して、パラメーターの型を親インターフェイスに拡張することを検討してください。
void doSomething(String x);
// change it to
void doSomething(CharSequence c);
このメソッドを使用するすべてのコードは変更なしで引き続きコンパイルされますが、再コンパイルが必要になります (古いバイナリは MethodNotFoundError で失敗するため)。
メソッドを親クラスにプルアップするのはどうですか。これには再コンパイルが必要ですか?
// before
public class B extends A{
protected void x(){};
}
// after
public class A {
public void x(){};
}
public class B extends A{}
メソッドは B から親 A に移動されました。また、可視性が保護されたものからパブリックに変更されました (ただし、これは問題ではありません)。
B で「バイナリ互換ラッパー」を維持する必要がありますか、それとも引き続き機能しますか (親クラスに自動的にディスパッチされます)。
// do I need this ?
public class B extends A{
// binary compatibility wrapper
public void x(){ super.x(); }
}