我正在寫一個方法,如果某件事情是真的,它會返回。但是如果測試條件所需的資源不可用,它將無法返回true或false。是否有返回true,false或unknown的Java約定?
此前,我只是使它返回一個boolean
的方法。但現在,爲了適應異常,我想在函數參數中傳遞true或false,並使用返回值作爲測試的成功或失敗指示符。
這是在Java中使用它的「正確和普通」方式嗎?或者是Java中的其他流行元素來實現這一點?
我正在寫一個方法,如果某件事情是真的,它會返回。但是如果測試條件所需的資源不可用,它將無法返回true或false。是否有返回true,false或unknown的Java約定?
此前,我只是使它返回一個boolean
的方法。但現在,爲了適應異常,我想在函數參數中傳遞true或false,並使用返回值作爲測試的成功或失敗指示符。
這是在Java中使用它的「正確和普通」方式嗎?或者是Java中的其他流行元素來實現這一點?
這是正確的,但不是一個好的做法。相反,你的方法應該返回一個布爾值並處理異常,如果不能夠計算出答案
的我會提出另一種方法:返回不boolean
,但Boolean
並返回true/false
當是資源並返回null
時候有沒有很資源
我肯定會讓該方法拋出一個異常,如果它不能計算正確的答案。
現在您必須決定引發的異常是否會被選中或取消選中。這真的取決於上下文。通常,我這樣想:如果調用者有辦法確保方法不會失敗,我會讓它拋出一個未經檢查的異常;否則,如果調用者無法絕對確定該方法不會失敗,那麼我會讓它成爲一個檢查異常。
這將是主叫可以確定故障的可能性的情況下:
class C1 {
public boolean canCalculateResultNow() { ... }
public boolean calculateResult() {
if (cannot get resource) throw new IllegalStateException("Cannot get resource");
...
}
}
現在,這裏就是如果主叫方不能肯定,該方法將能夠正常完成我會怎麼做:
class CannotCalculateResultException extends Exception { ... }
class C2 {
public boolean calculateResult() throws CannotCalculateResultException {
if (cannot calculate result) throw new CannotCalculateResultException();
...
}
}
另一種可能性,我真的不喜歡和極力勸阻,是使方法返回Boolean
,這是一個可空版的boolean
。 A Boolean
可以是true
,false
或null
。如果資源不可用,您可以使該方法返回null
。
我在這種方法中看到的主要問題是null
的含義可能不明確。調用代碼總是需要檢查結果是否爲空,開發人員(甚至在編寫此代碼幾個月之後)就必須閱讀方法的文檔,以瞭解空結果的含義。一個特定的檢查異常清楚地表明,某些事情可能出錯,出現什麼問題。此外,它會迫使開發人員爲出現問題的情況做好準備。在使用未經檢查的異常的方法中,方法canCalculateResult()
的存在也將向開發人員指示使用該類可能會出錯,而不需要閱讀文檔,並且可以合理地假定它對於無需先致電canCalculateResult()
,致電calculareResult()
。
你能否提供更多的上下文?現在,它聽起來像你想要一個布爾返回值與檢查或不檢查異常......但很難說肯定。 – corsiKa
只是返回true或false並且在失敗的情況下拋出異常有什麼問題? – NullUserException
反轉:如何*不*執行此操作:http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx – yas4891