簡體   English   中英

在Java中同時發生多個異常

[英]Simultaneously occuring multiple exceptions in java

我有一種方法,可能會收到無效的輸入值或帶有相關錯誤消息的輸出。

對於這兩種情況,我都想拋出一個異常,因此這兩種情況都可能在單個方法調用中發生,因此當異常可以同時發生時,如何將其作為單個異常處理!

看起來您正在嘗試使用異常進行驗證。 這可能有用,但是如果您想獲得所有與您要驗證的東西不符的東西,那么您需要做一些不同的事情。 一點偽代碼可以讓您大致了解:

public ValidationResult validateInput(Input input) {
    ValidationResult result = new ValidationResult();
    if (input.someField() == null) {
      result.addError("Some field cannot be null");
    }
    //etc
    return result;
 }

這個想法是,您有一個ValidationResult對象,該對象將存儲輸入錯誤的所有內容。 驗證完成后,您可以按以下方式進行處理:

ValidationResult result = validateInput(someInput);
if (result.hasErrors()) {
 for (ErrorMessage message : result.getErrors()) {
   log.error(message.getMessage());
 } else {
   //success
}

您可以編寫自己的ValidationResult類或對驗證框架進行研究,以找到適用於此目的的類。

不可能同時引發多個異常,如果聲明您的方法引發多個異常,則總是總是先引發其中一個異常。 例如:

public void method() throws Exception1, Exception2 {
    if (firstCondition)
        throw new Exception1();
    if (secondCondition)
        throw new Exception2();
    // body of method
}

在上面的玩具示例中,第一個或第二個條件將發生,但它們不能同時發生,其中一個將首先為真,然后將引發相應的異常。

兩種例外不可能永遠不會同時發生。

當拋出一個異常時,另一個無所謂,因為該方法不再有代碼流。

一段代碼不可能同時引發多個異常。 在代碼路徑中觸發的第一個將被拋出。

每個線程都有一個堆棧,並且異常意味着彈出一個框架,這意味着返回到調用方。 因此,如果在同一線程中同時發生兩個異常,這是沒有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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