/**
* @return List of group IDs the person belongs to
*
*/
public List<String> getGroups() {
if (this.getId().equals("")) return null;
}
我想拋出異常,而不是返回null,什麼時候一個重要的參數/相關性尚未設置拋出異常?
/**
* @return List of group IDs the person belongs to
*
*/
public List<String> getGroups() {
if (this.getId().equals("")) return null;
}
我想拋出異常,而不是返回null,什麼時候一個重要的參數/相關性尚未設置拋出異常?
如果參數/參數是從外部控制的,我會使用IllegalArgumentException
,如果方法剛剛在錯誤的時刻(狀態)被調用,則使用IllegalStateException
。在你的具體情況下,我認爲這是後者。一個(可疑的)替代品是NullPointerException
。
然而,這應該明確記錄在@throws
,以便用戶理解原因。
我會使用IllegalStateException,因爲id是所有者的狀態。如果id已經作爲參數傳遞,則IllegalArgumentException將是正確的。
我會通過擴展Exception來創建自己的Exception類型。通過這種方式調用函數可以捕獲特定的異常,並適當地處理它。 請注意,你可以對任何擴展異常做同樣的事情,但我更喜歡創建自己的異常類,所以我可以在異常處理中非常健壯。這當然取決於你。
爲什麼要重新發明輪子? IllegalArgumentException僅適用於非法參數。 – 2010-03-25 18:18:27
這取決於您想要陷入的非法參數的類型。我喜歡擴展Excpetion,或者在這種情況下IllegalArgumentException只是爲了讓一個特定的Exception類來處理我想處理的不同類型的條件。它使異常處理更容易,更強大,恕我直言。 -Jay – Jay 2010-03-25 18:41:41
如果無法確保始終設置id(通過在構造函數中要求它,例如,在哪裏可以檢查一個有效的id已通過),那麼我認爲拋出IllegalStateException的其他建議是正確的。但是,如果可能的話,嘗試確保您的對象首先無法進入此狀態
而不是拋出異常,您應該返回一個空列表。如果不符合依賴關係/參數,則沒有結果。從發佈的評論和代碼看來,這就是預期的行爲。如果id是空的,那麼沒有組連接,因此是一個空列表。
如果'getID()'返回null,則此代碼將引發NPE。最好使用'if(「」.equals(this.getId()))...' – 2010-03-25 17:47:55
我在抽象類中定義了它,並且裏面有一個try catch,並且在失敗時將返回空字符串。 – Pentium10 2010-03-25 17:51:41