什么是更好的方法来避免do-while(错误); 破解Java?

Ken*_*but 9 java do-while

当代码流是这样的:

if(check())
{
  ...
  ...
  if(check())
  {
    ...
    ...
    if(check())
    {
      ...
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我一般都看到这个工作,以避免这个混乱的代码流:

do {
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
} while(false);
Run Code Online (Sandbox Code Playgroud)

有哪些更好的方法可以避免这种变通/破解,从而使其成为更高级别(行业级别)的代码?

是否有可能来自Apache commons或Google Guava的构造?

注意:这是C++相同问题的副本.最好的答案是真正的函数指针和GOTO命令.两者都不存在于Java中.我对Java的同样兴趣很感兴趣.

将它放入一个新函数并使用return在我看来不是一个好的解决方案,因为return退出了该方法.因此,如果我的类有20个方法使用这些结构,我将不得不添加20个额外的方法来完成这个.这就是为什么GOTO是C++的最佳答案.

sp0*_*00m 6

要降低圈复杂度,可以将逻辑分为子方法:

public void go() {
    first();
}

public void first() {
    if(check()) {
        // #1
        second();
    }
}

public void second() {
    if(check()) {
        // #2
        third();
    }
}

public void third() {
    if(check()) {
        // #3
    }
}
Run Code Online (Sandbox Code Playgroud)


mvm*_*vmn 6

什么是"while(false)"nonsence?使用标签!

myLabel: {
    if(!check()) break myLabel;
    ...
    ...
    if(!check()) break myLabel;
    ...
    ...
    if(!check()) break myLabel;
    ...
}
Run Code Online (Sandbox Code Playgroud)

它是核心Java:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html