我们有两个类似的类层次结构,位于两个包中。该代码不是我们的,因此我们无法更改它。 我们必须以某种方式处理这些层次结构。到目前为止,我们最终重复了很多代码。例如我们有两种方法:
void process(pckg1.Client client){...}
和
void process(pckg2.Client client){...}
除了签名之外,方法的主体是相同的。重复的数量很大,但可能不足以证明反射的复杂性是合理的。 有更好的方法吗?
谢谢, 亚历克斯
最佳答案
一种选择是包装 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();
}
这显然只有在外部类很少并且处理这些类的自定义代码大量时才有意义。
关于java - java类层次结构的重复处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078273/