求求你别再写上千行的类了,试试 IDEA 这些牛逼的重构技巧吧!

简介: 求求你别再写上千行的类了,试试 IDEA 这些牛逼的重构技巧吧!

重构——抽取冗余代码

抽取冗余代码就是将重复代码抽取成一个独立的方法,之后再使用这段代码时就不再需要Ctrl + C,Ctrl + V,而是直接调用对应的方法即可

这样做也可以缩短原方法,使原方法更加简洁易懂

更值得一提的是如果这段代码需要修改,也只需修改一处,而不是发散式地到处修改

真是一箭三雕

使用IDEA进行冗余代码的抽取

1.找到重复代码

image.png

2.进行方法抽取 右键->选择重构->抽取->方法 (或者直接使用快捷键Ctrl + Alt + m)

image.png

image.png

自动检测出个别重复代码的细微差别,有些代码可能只改动一两个变量,IDEA会自动检测出来,并在抽取方法时提醒我们,选择左侧Accept Signature Change(接受签名变动)可以使抽取的方法自动替换更多的重复点

image.png

可以选择替换掉所有的重复代码(竟然有18处)

image.png

3.重构——更改方法签名

如果你对抽取出的方法的名字、参数、返回值或是修饰符不满意,不要使用Ctrl + R 修改,IDEA提供了重构方法——更改签名(快捷键Ctrl + F6)

注意:方法的名字指的是方法做了什么,而非怎么去做,最好是 动词+名词 格式

比如:

  • Tom.扫地() √
  • Tom.扫地With扫把() ×
  • Tom.用扫把扫地() ×

重构——转移成员变量+函数(转移职责)

将不应该由自己管理的成员变量和函数转移出去

那就要考虑两个问题:该转移谁?转移给谁?

来看一个图

image.png

  • 图中成员【偏A】被类【A】调用两次,而只被它所在的类【过长类】调用1次,因而应该转移给【A】去管理
  • 由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,同去留,转移给【A】
  • 成员【偏B】和函数【偏B】也是相同道理
  • 职责1(函数【1】和成员【偏职责1】)和职责2(函数【2】和成员【偏职责2】)由于找不到可转移的合适的类,所以应抽取出一个新的类

注意,先决定移动哪个成员变量,然后再决定移动哪个函数

使用IDEA转移成员变量和函数

1.移动成员变量,鼠标选择成员变量->右键->Refactor->Move,然后选择转移至哪个类

image.png

2.移动函数(与移动成员变量步骤相同)

重构——抽取类

当你发现要转移的成员变量和函数找不到合适的类时(转移职责却找不到下家),要想起来,这里是程序世界,而我们程序猿就是类和对象的造物主,是时候创建一个新的类,让它来替我们分担职责(成员变量和函数)了

使用IDEA抽取类

1.重构

选中要搬的成员变量和函数,右键->Refactor->Extract->Delegate(抽取一个委托者,委托他来管理这部分变量和函数,如果只有变量或只有函数,可以抽出参数对象Paramater Object或方法对象Method Object)

不推荐抽取参数对象,因为一般参数对象是给参数多的方法用的(用参数对象取代一长溜的参数),而且如果成员变量抽取了也不会影响任何函数的话,那就是无用对象了,不如直接把他们删除掉

image.png

2.为新类起个名,选个包吧

image.png

3.注意

抽取的函数和成员一定要符合一个原则,那就是被抽取函数使用被抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员应归于调用它最多的类,没有理由你用的比我多还让我来管理)

4.一些小问题

由于抽取的函数直接使用了未抽取的对象而导致重构失败,涉及到另一个重构(使用get方法而非直接使用私有成员变量),使用此重构即可解决

image.png


目录
相关文章
|
4月前
|
存储 Java Maven
IDEA常用插件之类Jar包搜索Maven Search
IDEA常用插件之类Jar包搜索Maven Search
122 0
|
6月前
|
Java
解决在idea中构建项目出现不能创建java类,只能创建文件的问题~
解决在idea中构建项目出现不能创建java类,只能创建文件的问题~
|
1月前
idea中给类自动添加注释
idea中给类自动添加注释
|
4月前
|
前端开发 JavaScript Java
IDEA中修改了Web项目后,更新资源 类和资源 重新部署的区别
IDEA中修改了Web项目后,更新资源 类和资源 重新部署的区别
36 1
|
4月前
|
Java
【学习记录】IDEA编辑器 - 类、方法模板配置
【学习记录】IDEA编辑器 - 类、方法模板配置
46 0
【学习记录】IDEA编辑器 - 类、方法模板配置
|
5月前
|
Java Maven
idea中maven打包工具类 repackage failed: Unable to find main class
idea中maven打包工具类 repackage failed: Unable to find main class
66 1
|
6月前
IDEA 自定义注解(类注释、方法注释)
IDEA 自定义注解(类注释、方法注释)
76 1
|
6月前
17项目实战 - IntelliJ IDEA 如何快速定位到方法的实现类
17项目实战 - IntelliJ IDEA 如何快速定位到方法的实现类
68 0
|
6月前
IntelliJ IDEA 设置类注释模板
IntelliJ IDEA 设置类注释模板
|
7月前
|
JSON 数据格式
重写bean类的toString()方法为JSON格式|idea设置toString()方法为JSON格式模板|idea设置toString()的模板
重写bean类的toString()方法为JSON格式|idea设置toString()方法为JSON格式模板|idea设置toString()的模板