Java code:
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) { 一个使用"源文件"和"目标文件"的很长的方法 System.out.println(myFiles.getSourceFile()); System.out.println(myFiles.getTargetFile());}
将
hello
的内容提取到新方法world
,这将是我想要的
但是由于方法world
很长,当我将其内联到hello
中时,可能会浪费我一些时间来选择要提取的行,因此我正在寻找其他解决方案。
好吧,据我所知,您可以获得的最接近的是通过 4 个重构。
在此行上使用"提取方法"(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()
上使用"提取变量"(ctrl-alt-v),myFiles.getTargetFile()
,对于所有匹配项。
结果:
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);
}
请注意,您可以一步轻松编写一个插件来为您进行此重构。如果您经常进行此重构,这将是推荐的途径(或者如果它只是惹恼了您......
看看重构/提取/参数对象。靠近你需要的。