2013-12-18 122 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

強制轉換髮生在編譯時而不是運行時,所以會有非我能想到的性能影響。這只是代碼庫中的一部分。