在重构方法时,很容易在 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(); }
}