Java代码:
public void hello(MyFiles myFiles) {
world(myFiles.getSourceFile(), myFiles.getTargetFile());
}
public void world(String sourceFile, String targetFile) {
// a very long method that uses 'sourceFile' and 'targetFile'
System.out.println(sourceFile);
System.out.println(targetFile);
}
我想将其重构为:
public void hello(MyFiles myFiles) {
world(myFiles);
}
public void world(MyFiles myFiles) {
File sourceFile = myFiles.getSourceFile();
File targetFile = myFiles.getTargetFile()
// a very long method that uses 'sourceFile' and 'targetFile'
System.out.println(myFiles.getSourceFile());
System.out.println(myFiles.getTargetFile());
}
如何通过Intellij-IDEA中的一些重构快捷方式完成所有操作?
一种可能的解决方案:
将world
方法内联到hello
:
public void hello(MyFiles myFiles){ //一个使用'sourceFile'和'targetFile'的很长的方法 的System.out.println(myFiles.getSourceFile()); 的System.out.println(myFiles.getTargetFile()); }
将hello
的内容提取到新方法world
中,这将是我想要的
但是由于方法world
非常长,当我将其内联到hello
时,可能会浪费我一些时间来选择我想要提取的行,所以我正在寻找其他解决方案。
答案 0 :(得分:1)
嗯,据我所知,你最接近的是通过4次重构。
在此行上使用“extract method”(ctrl-alt-m),并调用新方法world
。
world(myFiles.getSourceFile(), myFiles.getTargetFile());
结果:
public void hello(MyFiles myFiles) {
world(myFiles);
}
private void world(MyFiles myFiles) {
world(myFiles.getSourceFile(), myFiles.getTargetFile());
}
接下来,在此行上使用“inline”(ctrl-alt-n):
world(myFiles.getSourceFile(), myFiles.getTargetFile());
结果:
private void world(MyFiles myFiles) {
// a very long method that uses 'sourceFile' and 'targetFile'
System.out.println(myFiles.getSourceFile());
System.out.println(myFiles.getTargetFile());
}
现在,对myFiles.getSourceFile()
和myFiles.getTargetFile()
使用“提取变量”(ctrl-alt-v),用于所有事件。
结果:
private void world(MyFiles myFiles) {
// a very long method that uses 'sourceFile' and 'targetFile'
String sourceFile = myFiles.getSourceFile();
String targetFile = myFiles.getTargetFile();
System.out.println(sourceFile);
System.out.println(targetFile);
}
请注意,您可以轻松编写插件,只需一步即可为您完成此重构。如果你经常进行这种重构(或者只是让你烦恼的话......),那将是推荐的路线。
答案 1 :(得分:0)
查看Refactor / Extract / Parameter Object。接近你需要的。