这段代码有什么严重错误?它在语义上对我来说是正确的

时间:2014-12-26 07:33:55

标签: java optimization

在博客中看到这种代码驱使作者疯狂..为什么?

public boolean foo() {
    boolean b = bar();
    if (b == true) {
        return true;
    }
    else {
        return false;
    }
}

4 个答案:

答案 0 :(得分:7)

因为它的版本要短得多:

public boolean foo() {
    return bar();
}

正如其他人所指出的那样,整个函数foo可能是多余的。但是有些情况下无法消除,例如,如果它是在您正在实现的接口中定义的,或者bar是私有的。

构造if (b == true)对于没有经验的程序员来说尤其危险,因为它可能被错误地写成if (b = true)。编译器没有捕获到这个问题,但是会默默地执行if。

的true分支

答案 1 :(得分:6)

因为它可以写成

public boolean foo() {
    return bar();
}

代码不必要地复杂。

答案 2 :(得分:6)

因为foo()(以及整个功能本身)的调用可以替换为bar()

随时写信:

if (something == true) {
  return true;
} else {
  return false;
}

您所做的只是返回something的值,为什么不只是return something;?在OP中提供的代码中,整个函数没有任何意义,因为它只返回另一个函数的返回值。

另一个类似的用例(同样令人讨厌)是:

Foo foo = getFoo();
if (foo == null) {
  return null;
} else {
  return foo;
}

答案 3 :(得分:4)

以上所有答案中,我认为你甚至不需要打电话给foo()。

只需使用

if(bar()) 

直接在您调用foo()

的地方

根本不需要foo()功能