2017-08-24 136 views
0

我的問題非常簡單。 我有一個叫Triangle的類。這個類有一個方法;拋出異常或返回值

public boolean isAnyAngleGreaterThan(double deg); 

我的問題如下:

我應該拋出IllegalArgumentException如果「度」不在該範圍內0 <「度」 < 180或者我應該簡單地返回TRUE,如果度是< = 0如果deg> = 180,則爲FALSE?

或者哪一個是最優選的?

public boolean isAnyAngleGreaterThan(double deg) { 
    if (Double.compare(0, deg) >= 0) { 
     throw new IllegalArgumentException("Angle (deg) can't be negative."); 
    } else if (Double.compare(180, deg) <= 0) { 
     throw new IllegalArgumentException("Angle (deg) can't be greater or equal than 180."); 
    } 

    return Double.compare(aDeg, deg) > 0 
      || Double.compare(bDeg, deg) > 0 
      || Double.compare(cDeg, deg) > 0; 
} 

public boolean isAnyAngleGreaterThan(double deg) { 
    return Double.compare(aDeg, deg) > 0 
      || Double.compare(bDeg, deg) > 0 
      || Double.compare(cDeg, deg) > 0; 
} 

其中 'ADEG', 'bDeg' 和 'CDEG' 是一個角度,b和c中的三角形。

+0

如果你想繼續你的流程,你可以返回布爾值,否則你需要停止你可以拋出 –

+0

拋出和處理異常是相當繁忙的任務。通常,開發人員會拋出異常並由開發人員處理,並在更高級別上使用異常。所以如果沒有特別的需要拋出異常,那麼你不應該拋出異常,除非和直到它被問到,否則你不應該拋出異常。 –

回答

1

我假定從對象的名稱來看這個對象是要表示一個三角形。因此,它將駐留在通常稱爲model的代碼區域,該區域通常包含系統的狀態。

因此我會幾乎從來沒有在這裏執行有效性檢查。參數驗證應儘可能在最淺的水平進行,即儘可能接近或儘量讀取值。這是Fail Fast範例。

這是一個核心對象。它不應該對參數檢查負責,而應該負責訪問結果的安全性或對返回結果的加密。

您應該驗證模型代碼中參數的唯一時間是某些參數可能導致其他問題。在你的情況下,所有你比較的是其他double值,那麼應該沒有任何問題。

例如,如果要執行可能導致異常(例如除以零)或其他不良影響的計算,那麼在這種情況下,對於Fail Fast是正確的並且檢查零值,並且檢查零值拋出異常。

+0

你是什麼意思它屬於示範區?這只是三角類的一種方法? – Lurr

+0

@Lurr - 是的,但做三角形**做**事情,或者他們只是*東西*?我認爲你會同意他們是純粹的*事物,因此將被視爲模型的一部分。 – OldCurmudgeon

+0

是的,這是正確的,他們只是東西,他們什麼都不做。我認爲模型在講MVC時處理對數據的訪問。它絕對不屬於視圖,無論是控制器,但我沒有完全賣掉爲什麼它應該屬於模型?感覺它不屬於任何地方? – Lurr

0

一般規律是:請勿使用例外作爲流量控制

因此:

  • 如果該方法的結果導致了別的東西,然後trowing的異常後,那麼你應該返還boolean

  • 如果使用此方法的結果來確定是否需要拋出Exception,那麼該方法本身可能會拋出異常(並且應爲void)。

0

就個人而言,您的功能意味着基本檢查 - 三角形的角度是否大於參數?這並沒有說明對角度的限制因此應該只返回一個true/false值。但是,如果使用用戶定義的參數調用此函數,則可能會使驗證/錯誤反饋更容易返回指示該參數無效的異常。

這實際上是一個關於你的語義/你的個人喜好的問題。這真的取決於你想要你的功能做什麼。

0

你可能會拋出IllegalArgumentException如果度小於或等於0,並返回false,如果它大於180

其原因,前者是在一個多邊形的角度總是在數學意義上的正。後者的原因是多邊形可能有一個大於180°的角度,當然不是三角形,但從一般的數學意義上說,角度大於180度是有效的。