java - java类层次结构的重复处理

标签 java

我们有两个类似的类层次结构,位于两个包中。该代码不是我们的,因此我们无法更改它。 我们必须以某种方式处理这些层次结构。到目前为止,我们最终重复了很多代码。例如我们有两种方法:

void process(pckg1.Client client){...}

void process(pckg2.Client client){...}

除了签名之外,方法的主体是相同的。重复的数量很大,但可能不足以证明反射的复杂性是合理的。 有更好的方法吗?

谢谢, 亚历克斯

最佳答案

一种选择是包装 pckg1.Clientpckg2.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/

相关文章:

java - 如何使用 CSS 设置 JavaFX 圆半径?

java - 丰富 :scrollableDataTable is generating an extra column

java - 如何将字符串转换为 fragment 文件名

java - 在不打开eclipse的情况下卸载eclipse的插件

java - fragment 在应用程序中不起作用

java - 模拟 Android REST 连接的最佳方式

java - 如何将有效输入添加到数组列表中?

java spring - 覆盖从属性文件接收的属性值

java - Hadoop:使用自定义输入格式拆分大图像文件

Command+T 的 JavaFX 组合键(新标签)