Java While-Loops

nev*_*219 2 java conditional rewrite while-loop

因此,在重写一些代码时,我遇到了以下内容:

方法1

while ( iter.hasNext() ) {
    Object obj = iter.next();
    if ( obj instanceof Something ) {
        returnValue = (Something) obj;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在没有太多考虑的情况下将其重新编写为以下内容(重写的实际目的是为此方法中的其他逻辑):

方法2

while ( (iter.hasNext()) && (returnValue == null) ) {
    Object obj = iter.next();
    if ( obj instanceof Something ) {
        returnValue = (Something) obj;
    }
}
Run Code Online (Sandbox Code Playgroud)

我个人对这两者都没有任何强烈的偏好,并且两种方法都没有看到任何错误.任何人都可以想到使用这两种方法的好处或后果吗?返回变量returnValue.如果那是方法中的最后一个块,人们会怎么想?它刚刚返回?

编辑:所以这就是我正在做的事情:目前这个方法需要一组授权并验证它们 - 返回一个布尔值.此方法允许分组,因此您可以指定至少一个或全部(意味着如果至少一个授权有效,则传递整个集合).但是,此方法不支持授权级别,而我正在对其进行更改,以便每个级别都可以指定不同的分组.所有这些都只是背景信息...与上面的代码没有多大关系 - 另一种方法用于执行上面的代码块.

Car*_*ter 9

对我来说,更清楚的是将其作为一种方法来提取; 然后你可以简单地返回值而不是将它分配给本地.

while (iter.hasNext()) {
    Object obj = iter.next();
    if (obj instanceof Something)
        return (Something)obj;
}
return null;
Run Code Online (Sandbox Code Playgroud)

更好的是foreach循环

for (Object o : yourList)
    if (o instanceof Something)
        return (Something)o
return null;
Run Code Online (Sandbox Code Playgroud)

  • 我想回答这种方式,但只有当原始代码后面紧跟"return returnValue"时,它才是等价的.(我们不知道).如果_does_立即返回,你的代码会更好,尽管所有小丑都可能会抱怨多个返回点(他们没有意识到这是保持代码可读的指导原则,而不是来自on-high的诫命).假设你是正确的+1,因为这个成语主要以这种方式使用. (2认同)

Ed *_* S. 7

我喜欢第一个,因为你更清楚为什么你要摆脱循环.它说"如果这个条件成立,设置值并打破循环,我们就完成了".另一个花了我一秒左右,但正如你所说,没有太大的区别.