当代码流是这样的:
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++的最佳答案.
要降低圈复杂度,可以将逻辑分为子方法:
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)
什么是"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
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |