2013-07-03 32 views
2

我有一個項目,其中某些數據具有不可執行的使用語言結構的不變量,但我打算編寫我的代碼以便維護它們。如果他們出於某種原因被破壞,這意味着我的代碼是越野車。我有一些健康檢查代碼,可以發現這些不變量是否已經被破壞,但我不確定什麼是規範的Java方法來回應這種情況 - 是否存在一些我應該拋出的標準異常?使用斷言?Java不變異常

請注意,這是某個值在某個點被錯誤設置的問題。錯誤本身不是在進行完整性檢查時發生的,而是在過去發生的,並且完整性檢查正在發現它(即,完整性檢查本身正在運行並不是壞事,只是檢查失敗)。

謝謝!

回答

1

拋出IllegalStateException。這是專門用於這樣的目的。

+0

我發現很多不同的公司實現 - 你能提供一個鏈接嗎?謝謝。 – joshlf

+0

@Jashaszun你的意思是['IllegalStateException'](http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalStateException.html)? – Jeffrey

+0

@Jeffrey對不起,是的。這就是我的意思。 – Jashaszun

1

決定如何應用程序將作出反應破不變將是一個明智的第一步

萬一斷了不變的是不可恢復的,基本上指的是代碼,我第二個約IllegalStateException.html的回答(你可能要一個bug添加一些有用的上下文用於調試目的,例如變量在斷不變中) - 這種未經檢查的異常會阻止正在運行的線程

如果您可以從破損的不變量中恢復(通過用合理的默認值替換某些參數, - 您可能想要拋出一個檢查過的異常並將其捕捉到其中一個上層並執行計劃B

+0

嘿,我剛剛澄清了一下我的問題,回答了你的回答(根據我以前寫的內容,這是完全合理的,現在依然如此)。根據該文件:「表示在非法或不適當的時間調用了一種方法。」這是不正確的,因爲這個變量不應該有這個值/現在/,而是應該/永遠不會有這個值。儘管如此,它非常接近。這幾乎是正確的,只是不完全。 – joshlf

+0

好的。爲什麼不嘗試以下操作:將計算拆分爲一系列邏輯方法。每個方法都會使用前面步驟中的數據,但首先對其執行檢查,如果檢查失敗,則拋出IllegalArgumentException。初始集合的構造器的值應該做同樣的檢查,他們得到正確的輸入參數。這樣你就可以確保在每一步你會有正確的輸入 – diy

+0

在這個特定的背景下,這是行不通的,但我喜歡這個想法理論。無論如何,我想我會去IllegalStateException,因爲它是我發現的最接近的。 – joshlf