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

use*_*243 2 java optimization

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

public boolean foo() {
    boolean b = bar();
    if (b == true) {
        return true;
    }
    else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*nry 7

因为它的版本要短得多:

public boolean foo() {
    return bar();
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在这一点上,`foo`是不必要的.;-) (2认同)
  • @ The111不一定,例如,如果你必须实现一个接口. (2认同)

use*_*001 6

因为它可以写成

public boolean foo() {
    return bar();
}
Run Code Online (Sandbox Code Playgroud)

代码不必要地复杂.


The*_*111 6

因为foo()可以替换对(和整个函数本身)的调用bar().

你写的任何时候:

if (something == true) {
  return true;
} else {
  return false;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Foo foo = getFoo();
if (foo == null) {
  return null;
} else {
  return foo;
}
Run Code Online (Sandbox Code Playgroud)