2013-12-18 80 views
1

我维护由不再维护此产品的供应商编写的代码库(旧版,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 
    } 
} 

所以,很显然,他们正试图确定方法成功/通过传回一个布尔值,指示状态(验证)失败......我个人认为是糟糕的做法,我宁愿给调用者一个例外泡沫,但那只是我。

我很困惑的部分,为什么/这个供应商经常显式地将布尔型返回值转换为布尔值?这是多余的,肯定会在运行时造成一些开销,不是吗?这一次我是否做错了!? - 或者这只是我应该不注意的一些文体而已?

回答

1

它不会在运行时产生开销,因为编译器需要强制转换。 但它是不必要的。所有你需要的是

if (doSomething()) { 
    // do stuff 
} 

这是人的特质怪事谁不知道的语言非常好,谁没有看过别人的代码来获得一个什么样的好作风的想法。

+0

传回方法成功状态感觉像C到我... – SnakeDoc

+0

@SnakeDoc:也许。除非在C中,他会返回一个整数并将其与0比较。很难说出人们的想法。 –

+0

或者他们在想什么...... – SnakeDoc

1

你说的可能被认为是“不好的做法”,返回类型明显是布尔值。

他们最有可能做到了这一点,以维护类型安全,这是他们自己的特权。也许供应商有一个惯例,它会投射每种具有返回类型的方法,以确保它们确实获得了该类型。

1

强制转换发生在编译时而不是运行时,所以会有非我能想到的性能影响。这只是代码库中的一部分。