在intellij中,如何提取添加到列表并返回列表而不是使用列表作为参数的方法?

时间:2013-01-17 20:49:11

标签: 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");
        strings.add("b");

        for (String string : strings) {
            System.out.println(string);
        }
    }
}

如果我突出显示第一个add(...)行然后提取方法,则代码变为:

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>();
        addA(strings);
        strings.add("b");

        for (String string : strings) {
            System.out.println(string);
        }
    }

    private static void addA(List<String> strings) {
        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.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;

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;
    }
}

有没有办法以这种方式制作intellij提取方法?

1 个答案:

答案 0 :(得分:2)

您可以通过选择方法的前两行(包括新的ArrayList调用)来获得第二个结果。