文章目录
重构项目案例参考
重构技巧1 - 消除重复new创建
重构技巧2 - 提炼函数,消除重复计算
提炼函数
ctrl + alt + M,选择对应的代码块,进行提炼
提炼变量
ctrl + alt + v,选择要提炼的变量,进行提炼
搬移函数
重构 -> 移动实例方法 或 F6,选中方法,进行搬移
inlIne使用(内联)
inLine重构局部变量
选中变量:ctrl + alt + n
示例:
private static Object parseBoolean(List<String> arguments, Option option) {
Object value;
value = arguments.contains("-" + option.value());
return value;
}
// 点击value(return value)的value
// 通过快捷键 ctr + alt + n
// 内联后:
private static Object parseBoolean(List<String> arguments, Option option) {
return arguments.contains("-" + option.value());
}
inLine重构方法
批量代码拷贝
示例:
static class StringOptionParser implements OptionParser {
@Override
public Object parser(List<String> arguments, Option option) {
return parseString(arguments, option);
}
}
private static Object parseString(List<String> arguments, Option option) {
int index = arguments.indexOf("-" + option.value());
return String.valueOf(arguments.get(index + 1));
}
-
这时如果想将parseString的内容,copy到StringOptionParser的方法上,可以使用 Ctrl + alt + n进行inLine(IDEA进行copy 粘贴)
有如下几种策略:这里选第三种,代码示例如下
static class StringOptionParser implements OptionParser { @Override public Object parser(List<String> arguments, Option option) { int index = arguments.indexOf("-" + option.value()); return String.valueOf(arguments.get(index + 1)); } } // 由于选择,保留方法,因此我们需要手动修改 private static Object parseString(List<String> arguments, Option option) { int index = arguments.indexOf("-" + option.value()); return String.valueOf(arguments.get(index + 1)); } // 修改后 private static Object parseString(List<String> arguments, Option option) { return new StringOptionParser().parser(arguments, option); }
-
在通过inLine方法,将代码拷贝回来
if (parameter.getType() == String.class) { value = parseString(arguments, option); } // inLine // 这时候本来的方法就没了 if (parameter.getType() == String.class) { value = new StringOptionParser().parser(arguments, option); }
-
重构
重构菜单栏
ctrl + alt + shift + T
IDEA尽可能使用接口
右键 -> 重构 -> 尽可能使用接口
参考案例
- 目前调用
依赖具体实现
if (parameter.getType() == int.class) {
// 依赖具体实现
IntOptionParser parser = new IntOptionParser();
value = parser.parse(arguments, option);
}
- 利用尽可能使用接口,将其修改为接口方式
- 效果
if (parameter.getType() == int.class) {
OptionParser parser = new IntOptionParser();
value = parser.parse(arguments, option);
}