2011-10-07 72 views
3

我正在寫一個方法,如果某件事情是真的,它會返回。但是如果測試條件所需的資源不可用,它將無法返回true或false。是否有返回true,false或unknown的Java約定?

此前,我只是使它返回一個boolean的方法。但現在,爲了適應異常,我想在函數參數中傳遞true或false,並使用返回值作爲測試的成功或失敗指示符。

這是在Java中使用它的「正確和普通」方式嗎?或者是Java中的其他流行元素來實現這一點?

+0

你能否提供更多的上下文?現在,它聽起來像你想要一個布爾返回值與檢查或不檢查異常......但很難說肯定。 – corsiKa

+5

只是返回true或false並且在失敗的情況下拋出異常有什麼問題? – NullUserException

+1

反轉:如何*不*執行此操作:http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx – yas4891

回答

7

如果資源不可用,你的方法應該返回一個布爾值並且拋出一個Exception

+0

這是正確的,只要不可用的資源是特殊情況。如果這是一個正常和預期的狀態,一個例外是不合適的。 – pamphlet

0

這是正確的,但不是一個好的做法。相反,你的方法應該返回一個布爾值並處理異常,如果不能夠計算出答案

1

的我會提出另一種方法:返回不boolean,但Boolean並返回true/false當是資源並返回null時候有沒有很資源

2

我肯定會讓該方法拋出一個異常,如果它不能計算正確的答案。

現在您必須決定引發的異常是否會被選中或取消選中。這真的取決於上下文。通常,我這樣想:如果調用者有辦法確保方法不會失敗,我會讓它拋出一個未經檢查的異常;否則,如果調用者無法絕對確定該方法不會失敗,那麼我會讓它成爲一個檢查異常。

這將是主叫可以確定故障的可能性的情況下:

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,falsenull。如果資源不可用,您可以使該方法返回null

我在這種方法中看到的主要問題是null的含義可能不明確。調用代碼總是需要檢查結果是否爲空,開發人員(甚至在編寫此代碼幾個月之後)就必須閱讀方法的文檔,以瞭解空結果的含義。一個特定的檢查異常清楚地表明,某些事情可能出錯,出現什麼問題。此外,它會迫使開發人員爲出現問題的情況做好準備。在使用未經檢查的異常的方法中,方法canCalculateResult()的存在也將向開發人員指示使用該類可能會出錯,而不需要閱讀文檔,並且可以合理地假定它對於無需先致電canCalculateResult(),致電calculareResult()

相關問題