如果类 A 和 B 中的方法 a 行为相似,则可以将参数替换为参数类。这将定义两个 get 方法(param1 和 param2),您需要两个构造函数,一个带有两个参数供 A 类使用,而 B 类只有一个参数(实际上有几种解决方案可以得到相同的结果)。
这样,两个类都可以实现相同的接口:
public interface ABInterface {
void a(AParams params);
void b(BParams params);
...
}
public class AParams implements ABInterface {
private int param1;
private int param2;
public AParams(int param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public AParams(int param1) {
this.param1 = param1;
}
public int getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class BParams implements ABInterface {
private String param1;
private int param2;
public BParams(String param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public BParams(String param1) {
this.param1 = param1;
}
public String getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class A{
public void a(AParams params) {
...
}
public void b(BParams params) {
...
}
...
}
public class B{
public void a(AParams params){
...
}
public void b(BParams params){
...
}
...
}
public void someMethod() {
// you can new invoke these methods like this
a.a(new AParams(1,2));
b.a(new AParams(1));
// but also like this, to reuse existing code
AParams params = new AParams(1,2);
a.a(params);
b.a(params);
}