前言
垃圾代码中最常碰到的一种情况就是重复代码,如果你在一个以上的地方看到相同的程序结构,那么这就可能是一个糟糕的情况,如果将它们合而为一,程序会变得更好。重复代码往往有下面几种情况。
一个类中重复代码
最简单的方式就是一个类中存在重复的代码,比如:
public class DuplicatedCodeTest1 {
public void say1() {
String msg = "sadf" + "fadf";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
public void say2(String arg) {
String msg = "sadf" + "fadf" + "sdasdf";
msg += "aa";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
}
-
say1()
方法和say2()
方法存在重复代码。
重构建议
使用Extract Method
方式,将重复的代码放进一个独立的函数中,并让函数名称解释函数用途。如下图所示:

-
选中要抽出的方法,点击上面的 Extract Method....

-
idea会自动将重复的代码替换掉,是不是很简单呢
子类存在重复代码
还有些情况就是互为兄弟的子类包含相同的代码结构。如下图所示:

public class DupSon2 extends DupFather {
public void say1() {
String msg = "sadf" + "fadf" + "sdasdf";
msg += "aa";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
}
public class DupSon1 extends DupFather {
public void say1() {
String msg = "sadf" + "fadf";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
}
重构建议
-
按照上面 Extract Method
的方法抽出相同的代码。 -
然后使用 Pull Up Method
方式抽取到父类中,如下图所示:

-
选中方法,然后使用 Refactor
的Pull Members Up.....
不相干类存在重复代码
那么现在如果两个不相干的类里面出现重复代码怎么办呢?
public class DupCode1 {
public void say1() {
String msg = "sadf" + "fadf";
msg += "ccasdf";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
}
public class DupCode2 {
public void say1() {
String msg = "sadf" + "fadf";
System.out.println("***************");
System.out.println(msg);
System.out.println("***************");
}
}
-
DupCode1
类和DupCode2
类是两个不相干的类,那么该如何重构呢?
重构建议
可以考虑对其中一个类使用Extract Class
,也就是将重复代码提炼到一个独立的类中,然后再另外一个类内使用这个新类。
比如本例抽出重复代码到DupCode
中,如下图:

其他地方调用这个DupCode
,如下图所示:

原文始发于微信公众号(JAVA旭阳):【代码重构】消灭重复代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63724.html