Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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中,如何安全地从循环中重构continue语句?_Java_Intellij Idea_Refactoring - Fatal编程技术网

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

Java 在Intellij中,如何安全地从循环中重构continue语句?,java,intellij-idea,refactoring,Java,Intellij Idea,Refactoring,我讨厌java代码中的continues(和breaks),但我并不总是编写代码的人,所以我想知道Intellij是否有一种安全的方法将它们从循环中删除?下面是一个显示输出奇数的for循环的简单示例: package com.sandbox; import static java.util.Arrays.asList; public class Sandbox { public static void main(String[] args) { new Sandbo

我讨厌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);
        }
    }
}

我如何摆脱
继续
,而不用担心我的代码是否被破坏?

我已经找到了解决方法。突出显示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个大括号,并继续散布在整个for循环中。continues不断地阻止您重构,因为您无法将包含continue的代码提取到它自己的方法中,因为
continue
仅在for循环的上下文中语法正确


这个答案为代码更干净提供了一个步骤,但有时在让代码更干净之前,您必须先让代码更混乱一些。这就是这样一个例子。

Alt+输入if条件并选择“Invert if condition”。它删除了您的示例和其他一些示例中的“continue”。

这看起来不像是“重构”。我将它写成:
for(…){if(否定前面的表达式){printIt();}}
。我不喜欢continue或break(除了非常特殊的情况)。我喜欢很多方法,但是这个(特殊情况)。。对我来说似乎不太正确:D尽管如此,我认为这是一个很好的答案,因为它提供了执行某项任务所需的说明。@user2246674您没有超出我给出的“微不足道的示例”的范围。我在看代码10大括号,大括号中散布着
continue
s,通常深深地嵌套在
if
语句中。能够删除
continue
s是清理代码的第一步。我不会通过将continue转换为return来修复它。我会通过删除continue来修复它。如果有过多的嵌套,那么这应该是固定的,但实际上与流本身无关。@user2246674您如何安全地这样做?嗯,我明白了。它并没有出现在我真实的、非琐碎的代码上。但知道它在某些情况下起作用是件好事。