假設你有下面的代碼塊:如何處理無效的執行狀態?
if (Light.On) {
// do something...
} else if (Light.Off) {
// do something else...
} else {
// this state should never be reached
}
現在假設應用程序邏輯決定了在這部分代碼,最後的狀態不應該達到,但它是不是可以在確定編譯時間。也許還有其他的狀態(例如Light.Broken
)可以由應用程序的其他部分設置,但這裏沒有使用。
您在最後的else
區塊中添加了哪些代碼?
- 不添加任何代碼,因爲無論如何都不應該添加代碼。
- 添加一些日誌功能,以便您作爲開發人員知道已經達到了一些非法狀態。
- 拋出一個異常,因爲不能到達狀態,並且無論如何都要到達,否則一定是錯誤的。
第一個選項似乎沒有合理的我,希望不順心的權似乎根本沒有正確的選擇。選項二的優勢在於您的應用程序不會立即崩潰,因此如果發生這種情況的情況在罕見的情況下未能在測試中發現,那麼客戶可以繼續使用該應用程序,並向開發人員通知問題。選項三會導致應用程序崩潰,這顯然不是您希望客戶體驗到的事情,但它確實表明出現問題。
處理這種情況的最佳方法是什麼?
EDIT,基於評論:
一些附加的考慮來操縱討論:
- 它包含上述代碼不允許任何其他值,以在被設定的方法的合同那一刻然後打開和關閉。
- 假設代碼位於應用程序的非關鍵部分。
你如何實現這樣的解決方案?你實際上是否實現了一些「開發」標誌,並將錯誤處理的基礎價值?在我看來,這樣做不會使代碼非常乾淨...... – Daan 2009-04-15 07:55:41
我們的構建腳本提示輸入版本號。如果提供了一個reelase構建完成,如果它不是版本被標記爲工程發佈。在運行時我們有一個標準的錯誤報告功能,相應的行爲。 – PaulJWilliams 2009-04-15 08:01:49
從Java 1.4開始,您還可以使用生成AssertionError的assert指令。默認情況下,斷言在運行時會被忽略(表現爲無操作),但您可以使用-ea JVM開關啓用它們。 – 2009-04-15 08:58:32