[英]Java method contains another method that throws exception
我有公共方法add(String)
,該方法調用私有方法inspectSequence(String)
來檢查String是否有效。
如果傳遞的String
有效,則此方法返回array;如果無效,則方法拋出IllegalArgumentException
代碼是下一個
public void add(String sequence) throws IllegalArgumentException{
inspectSequence(sequence);
}
private int[] inspectSequence(String sequence){
int[] array;
//some actions
if(<some condition>) throw new IllegalArgumentException("description");
return array;
}
因此,如果傳遞了無效的String
來add
方法,則輸出將是下一個:
java.lang.IllegalArgumentException: description
at inspectSequence
at add
但是我不想讓用戶知道私有的inspectSequence
方法,因為這是實現細節,對嗎?
那我該怎么辦? 在這里拋出未經檢查的異常是一個好主意嗎?
最好將一個異常拋出到inspectSequence
方法內,或者當提供的String
null
時我應該返回null
,然后在add
方法中檢查返回的結果,並取決於是否拋出異常?
但是我不想讓用戶知道私有的inspectSequence方法,因為這是實現細節,對嗎?
我會說不。 確實,您不希望用戶(在此情況下,這意味着有人在調用代碼)不希望“知道”諸如inspectSequence()
類的內部方法。 “知道”是指能夠打電話,依靠等。
明知可能會引發異常,什么情況下是什么,主叫方應該知道,知道那里究竟是拋出是沒有必要的,但也不會受到傷害。
當然,你可以趕上在調用方法異常,並拋出一個又一個,但會失去公正的信息和可能使代碼更難調試/因為當輸入不被接受,將失去到呼叫者的信息維護。
那我該怎么辦? 在這里拋出未經檢查的異常是一個好主意嗎?
這取決於是應在運行時處理該異常還是對其進行修復。
假設調用者需要知道該序列無效,並且應該適當地處理該信息,例如向最終用戶顯示一些信息。 在這種情況下,最好拋出一個描述該情況的檢查異常。
另一方面,如果輸入違反了方法的約定,即輸入序列永遠不應該無效(否則是編程錯誤),則IllegalArgumentException
就可以了-諸如將null傳遞給不需要的方法空參數。
最好將一個異常拋出到inspectSequence方法內,或者當提供的String無效時我應該返回null,然后在add方法中檢查返回的結果,並取決於是否拋出異常?
我會說不。 在某些情況下(例如,如果您有不同的調用者以不同的方式處理null),則返回null然后在調用方法中進行處理可能是一種合理的方式,但您的情況並非如此。 這將使代碼更復雜,因此更難於閱讀和維護,特別是因為null在這種情況下可能需要定義多個含義。
您可以捕獲IllegalArgumentException並拋出自己的異常。
public void add(String sequence) throws MyCustomException {
try {
inspectSequence(sequence);
} catch (IllegalArgumentException e) {
throw new MyCustomException("more readable cause that hides internals");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.