[英]exception execution data flow, why is my object is null when exception thrown?
我不確定為什么會這樣,但是我有一個簡單的設置,其中調用者的返回值為null。
我調用了一個可能引發注冊異常的函數。 當這樣做時,myXDSConsumerRequestHandler保持為空。 問題是我可以從已注冊的事件中恢復(已檢查被調用者上的對象)。 那么,如何調用retrieveDocuments並取回對象呢?
我知道拋出異常時流程會中斷,因此我應該在更高級別上捕獲異常嗎?
這是呼叫者:
try {
myXDSConsumerRequestHandler =
RetrieveDocSetUtil.retrieveDocuments(NIST, multipleRetrieveMap);
} catch (VerboseIllegalArgumentException e) {
} catch (XDSException e) {
}
這是被叫方:
public static RetrieveDocumentSetImpl retrieveDocuments(
String repoURL, Map<String, String> docRepoMap)
throws VerboseIllegalArgumentException, XDSException {
RetrieveDocumentSetImpl myXDSConsumerRequestHandler =
new RetrieveDocumentSetImpl(repoURL);
myXDSConsumerRequestHandler.retrieveDocumentSet(docRepoMap);
return myXDSConsumerRequestHandler;
}
謝謝!
您的代碼按以下順序執行:
retrieveDocuments
myXDSConsumerRequestHandler
如果在步驟1中引發異常,則步驟2將永遠不會發生。
通常,您不能同時引發異常和返回值。
如果retrieveDocuments()
引發異常,則它永遠沒有機會返回某些內容。 語句myXDSConsumerRequestHandler = RetrieveDocSetUtil.retrieveDocuments()
無法正常完成。
無法同時從方法中捕獲異常並接收返回值。
如果retrieveDocuments()
具有有意義的意義,即使遇到這些異常,它也可以返回給調用者,那么此方法應該在內部捕獲異常並返回適當的返回值,而不是允許異常傳播到調用方法。
您的問題來自於做過多的方法。 它都獲取RetrieveDocumentSetImpl並嘗試使用它。
RetrieveDocumentSetImpl myXDSConsumerRequestHandler =
new RetrieveDocumentSetImpl(repoURL);
myXDSConsumerRequestHandler.retrieveDocumentSet(docRepoMap);
return myXDSConsumerRequestHandler;
將此分為兩種方法:
RetrieveDocumentSetImpl myXDSConsumerRequestHandler =
new RetrieveDocumentSetImpl(repoURL);
return myXDSConsumerRequestHandler;
它要么返回處理程序,要么失敗,並引發Exception,並且
myXDSConsumerRequestHandler.retrieveDocumentSet(docRepoMap);
然后,您的調用者可以調用第一個方法,獲取返回碼,然后,如果願意,請嘗試嘗試各種操作(例如,調用第二個方法),以捕獲它們引發的異常。
這是我的建議
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.