我们在两个包中有两个类似的层次结构。代码不是我们的,所以我们不能改变它。 我们必须以某种方式处理这些层次结构。到目前为止,我们最终复制了大量代码。例如,我们有两种方法:
void process(pckg1.Client客户端){...}
和
void process(pckg2.Client客户端){...}
除签名外,方法的主体是相同的。重复的数量很大,但不太可能证明反射的复杂性。 有没有更好的方法呢?
谢谢, 亚历
答案 0 :(得分:3)
一种选择是包装pckg1.Client
和pckg2.Client
的共享方法:
public interface ClientWrapper {
void sharedMethod();
}
public class Packg1ClientWrapper implements ClientWrapper {
private final pckg1.Client client;
public Pck2ClientWrapper(final pckg1.Client client) {
this.client = client;
}
public void sharedMethod() {
client.sharedMethod();
}
}
public class Packg2ClientWrapper implements ClientWrapper {
private final pckg2.Client client;
public Pck2ClientWrapper(final pckg2.Client client) {
this.client = client;
}
public void sharedMethod() {
client.sharedMethod();
}
}
然后,您可以在方法中使用ClientWrapper
,并可选择提供创建包装器的实用程序方法。
public void process(final pckg1.Client client) {
process(new Pckg1ClientWrapper(client));
}
public void process(final ClientWrapper wrapper) {
wrapper.sharedMethod();
}
如果很少有外部类和大量自定义代码处理这些类,这显然才有意义。