我正在维护一个不再维护此产品的供应商编写的代码库(旧版,Java 3)。
我经常遇到这样的事情:
private boolean doSomething() {
boolean success = false;
// do stuff
if (/*some stuff*/) {
success = true;
}
return success;
}
public void doStuff() {
boolean ok = (boolean) doSomething();
if (ok) {
// do stuff
}
}
所以,显然他们试图通过传回指示状态(验证)的布尔值来确定方法成功/失败......我个人认为这是不好的做法,我更倾向于向呼叫者发出异常泡沫,但是这就是我。
我很困惑的部分,为什么这个供应商经常将布尔返回值显式地转换为布尔值?这是多余的,肯定会在运行时产生一些开销,不是吗?我一直都做错了吗?? - 或者这只是一些我不应该注意的风格?
答案 0 :(得分:1)
它不会在运行时产生开销,因为编译器存在转换。 但这是不必要的。你所需要的只是
if (doSomething()) {
// do stuff
}
对于那些不太熟悉语言并且没有阅读别人的代码以了解什么是好风格的人来说,这是一种特殊的怪异。
答案 1 :(得分:1)
你说它可以被认为是“坏习惯”并且返回类型显然是布尔值是正确的。
他们很可能这样做是为了维护类型安全,这是他们自己的特权。也许供应商有一个约定,可以转换每个具有返回类型的方法,以确保它们确实获得了该类型。
答案 2 :(得分:1)
转换发生在编译时而不是运行时,所以我会想到会产生非性能影响。这只是代码库中的残缺。