簡體   English   中英

Java方法包含另一個引發異常的方法

[英]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;
}

因此,如果傳遞了無效的Stringadd方法,則輸出將是下一個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM