Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在intellij中,如何提取添加到列表并返回列表的方法,而不是使用列表作为参数?_Java_Intellij Idea_Refactoring - Fatal编程技术网

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在这种情况下使用任何收集接口的特殊知识来替换一个调用,它不知道它们之间有关联。