要成为高效的Android程序员,需要头脑灵活,能够在开发、调试和测试的过程中重构代码,重构代码最大的风险是可能会引入意外的错误,Android Studio通过分析某些具有危险性的重构操作来降低风险,并接着激活Find工具窗口,应该将所有重要的重构修改单独做一次Git提交,以便回退。
Refator this菜单(Ctrl+Alt+Shift+T
):
重命名
在project窗口选中类文件,
Ctrl+Alt+Shift+T
唤出重构菜单,选择Rename,出现的对话框允许重命名类,以及该名称在注释、测试用例和继承类中所有出现的地方
修改签名
该操作允许修改方法的以下属性:可见性、名称、返回类型、参数、抛出异常
将光标置于方法名
Ctrl+Alt+Shift+T
唤出重构菜单,选择Change Signature
类型迁移
允许把一种Java类型改为另一种
移动
- 移动源文件
- 在project窗口拖拽源文件
- 选中源文件,用重构菜单的Move项
- 移动成员
- 光标置于该行,用重构菜单的Move项,能够把成员从一个类移到另一个类中
复制
...
安全删除
Safe Delete在执行删除之前查找该资源的依赖
抽取
Extract有一系列操作:抽取变量、抽取常量、抽取字段、抽取参数、抽取方法
抽取变量
private String saySomething(){ return "something"; }
光标置于硬编码的"something"任意位置,
Ctrl+Alt+Shift+T
选择Extract的Variable(Ctrl+Alt+V
),抽取本地变量并根据硬编码的字符串来命名它private String saySomething(){ final String something = "something"; return something; }
抽取常量
Ctrl+Alt+C
抽取字段
会将一个本地变量转换为类中的一个成员
private Date getDate(){ return new Date(); }
光标置于Date,
Ctrl+Alt+Shift+T
选择Extract的Field(Ctrl+Alt+F
)public class Sandbox{ private Date mDate; private Date getDate(){ mDate = new Date(); return mDate; } }
抽取参数
抽取变量并将其作为所在方法的参数
private Date getDate(){ return new Date(); }
光标置于Date,
Ctrl+Alt+Shift+T
选择Extract的Parameter(Ctrl+Alt+P
)private Date getDate(Date date){ return date; }
抽取方法
选择一行或多行连续代码并将它们置于一个单独的方法中
private String methodHello(){ String greet = "hello"; StringBuilder stringBuilder = new StringBuilder(); for(int i=0; i<10; i++){ stringBuilder.append(greet + i); } return stringBuilder.toString(); } private String methodGoodbye(){ String greet = "Goodbye"; StringBuilder stringBuilder = new StringBuilder(); for(int i=0; i<10; i++){ stringBuilder.append(greet + i); } return stringBuilder.toString(); }
选中
StringBuilder stringBuilder = new StringBuilder(); for(int i=0; i<10; i++){ stringBuilder.append(greet + i); } return stringBuilder.toString();
Ctrl+Alt+Shift+T
选择Extract的Method(Ctrl+Alt+M
)扫描文件发现还有一个相同的代码块实例
@NonNull private String getGreet(String greet) { StringBuilder stringBuilder = new StringBuilder(); for(int i=0; i<10; i++){ stringBuilder.append(greet + i); } return stringBuilder.toString(); } private String methodHello(){ String greet = "hello"; return getGreet(greet); } private String methodGoodbye(){ String greet = "Goodbye"; return getGreet(greet); }