在Intellij中,您如何安全地重构循环中的continue语句?

时间:2013-06-26 00:09:11

标签: java intellij-idea refactoring

我在我的java代码中讨厌continue s(和break s),但我并不总是那个编写代码的人,所以我想知道Intellij是否有一种安全的方法来删除它们从循环?这是一个简单的例子,显示了一个打印奇数的for循环:

package com.sandbox;

import static java.util.Arrays.asList;

public class Sandbox {

    public static void main(String[] args) {
        new Sandbox().run();
    }

    private void run() {
        for (Integer integer : asList(1, 2, 3, 4, 5, 6, 7)) {
            if (integer % 2 == 0) {
                continue;
            }
            System.out.println(integer);
        }
    }
}

我如何摆脱continue而不必担心我的代码是否破损?

2 个答案:

答案 0 :(得分:3)

在if条件上按Alt + Enter并选择“Invert If Condition”。它会在您的示例和其他一些示例中删除“继续”。

答案 1 :(得分:1)

我发现了如何做到这一点。突出显示里面 for循环中的所有内容并提取到方法中。例如,请突出显示:

        if (integer % 2 == 0) {
            continue;
        }
        System.out.println(integer);

并提取方法,它将成为:

package com.sandbox;

import static java.util.Arrays.asList;

public class Sandbox {

    public static void main(String[] args) {
        new Sandbox().run();
    }

    private void run() {
        for (Integer integer : asList(1, 2, 3, 4, 5, 6, 7)) {
            iterate(integer);
        }
    }

    private void iterate(Integer integer) {
        if (integer % 2 == 0) {
            return;
        }
        System.out.println(integer);
    }
}

这比以前更干净吗? 不!这不是重点。想象一下,这个不是一个简单的例子。想象一下,你有一个代码在for循环中嵌套了10个大括号,并继续遍布各处。继续不断地阻止您进行重构,因为您无法将包含continue的代码提取到自己的方法中,因为continue在for循环的上下文中仅在语法上是正确的。

这个答案为更干净的代码提供了一个步骤,但有时你必须让事情变得有点麻烦才能让它们变得更清洁。这是一个例子。