[英]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.