Java 在intellij中,如何提取添加到列表并返回列表的方法,而不是使用列表作为参数?
如果我从这样的方法开始:Java 在intellij中,如何提取添加到列表并返回列表的方法,而不是使用列表作为参数?,java,intellij-idea,refactoring,Java,Intellij Idea,Refactoring,如果我从这样的方法开始: package com.sandbox; import java.util.ArrayList; import java.util.List; public class Sandbox { public static void main(String[] args) { List<String> strings = new ArrayList<String>(); strings.add("a");
package com.sandbox;
import java.util.ArrayList;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.add("a");
strings.add("b");
for (String string : strings) {
System.out.println(string);
}
}
}
package com.sandbox;
import java.util.ArrayList;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<String> strings = addA();
strings.add("b");
for (String string : strings) {
System.out.println(string);
}
}
private static List<String> addA() {
List<String> strings = new ArrayList<String>();
strings.add("a");
return strings;
}
}
我几乎从不想要这个。我宁愿它这样做:
package com.sandbox;
import java.util.ArrayList;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.addAll(addA());
strings.add("b");
for (String string : strings) {
System.out.println(string);
}
}
private static List<String> addA() {
List<String> strings = new ArrayList<String>();
strings.add("a");
return strings;
}
}
package.com.sandbox;
导入java.util.ArrayList;
导入java.util.List;
公共类沙箱{
公共静态void main(字符串[]args){
列表字符串=新的ArrayList();
strings.addAll(addA());
字符串。添加(“b”);
for(字符串:字符串){
System.out.println(字符串);
}
}
私有静态列表addA(){
列表字符串=新的ArrayList();
字符串。添加(“a”);
返回字符串;
}
}
或者像这样:
package com.sandbox;
import java.util.ArrayList;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.add("a");
strings.add("b");
for (String string : strings) {
System.out.println(string);
}
}
}
package com.sandbox;
import java.util.ArrayList;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<String> strings = addA();
strings.add("b");
for (String string : strings) {
System.out.println(string);
}
}
private static List<String> addA() {
List<String> strings = new ArrayList<String>();
strings.add("a");
return strings;
}
}
package.com.sandbox;
导入java.util.ArrayList;
导入java.util.List;
公共类沙箱{
公共静态void main(字符串[]args){
List strings=addA();
字符串。添加(“b”);
for(字符串:字符串){
System.out.println(字符串);
}
}
私有静态列表addA(){
列表字符串=新的ArrayList();
字符串。添加(“a”);
返回字符串;
}
}
有没有办法使intellij extract方法如此?您可以通过选择方法的前两行(包括新的ArrayList调用)获得第二个结果。第一个结果无法获得,因为它更改了语义。@DanielKaplan您正在用addAll()替换add()。提取方法只会移动代码,而不会改变其性质。另外,我不相信IntelliJ在这种情况下使用任何收集接口的特殊知识来替换一个调用,它不知道它们之间有关联。