java - 删除java中的重复代码

标签 java refactoring code-duplication

class A extends ApiClass
{
   public void duplicateMethod()
   {
   }
}    


class B extends AnotherApiClass
{
   public void duplicateMethod()
   {
   }
}

我有两个扩展不同 api 类的类。这两个类有一些重复 方法(在两个类中重复相同的方法)以及如何删除这种重复?

编辑

ApiClass 和AnotherApiClass 都不在我的控制范围内

最佳答案

根据代码的不同,您可以执行以下操作:

public class Util
{
    public static void duplicateMethod()
    {
        // code goes here
    }
}

然后让另外两个 duplicateMethods 调用那个。因此代码不会重复,但方法名称和对 Util.duplicateMethod 的调用会重复。

如果 Util.duplicateMethod 中的代码需要访问 A 和 B 类的实例/类变量,它不会很好地工作,但它有可能完成(如果您需要,请告诉我)。

编辑(基于评论):

使用实例变量,它变得不那么漂亮……但可以做到。像这样的东西:

interface X
{
    int getVar();
    void setVar(A a);
}

class A 
    extends    ApiClass
    implements X
{
}

class B
    extends    AnotherApiClass
    implements X
{
}

class Util
{
    public static void duplicateMethod(X x)
    {
       int val = x.getVal();
       x.setVal(val + 1);
    }
}

因此,对于您需要访问的每个变量,您将创建一个获取方法(并在需要时进行设置)。我不喜欢这种方式,因为它使 get/set 方法公开,这可能意味着您正在提供您不想使用的东西。另一种方法是通过反射(reflection)来做一些事情,但我更不喜欢这样:-)

关于java - 删除java中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437692/

相关文章:

Java:void 方法返回值?

Java GUI 搜索目录文件

Java包移植

oracle - 通过拆分为多个游标来重构大型游标查询

intellij-idea - IntelliJ 中有没有办法对方法进行使用搜索并通过传递给该方法的特定参数对其进行过滤?

javascript - 在对象数组中查找匹配 id 的最佳方法?

.net - 为什么我在 Reflector 的 Linq 中看到如此多的代码重复?

java - 从 java 1.7 升级到 1.8 后,使用 Maven 编译错误,但在 Eclipse 中没有

javascript - 在 ExtJS6 中创建电子邮件字段组件

c# - 如何避免重复?