【发布时间】:2010-11-24 19:46:34
【问题描述】:
在重构方法时,很容易在 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(); }
}
【问题讨论】:
标签: java refactoring binary-compatibility