我不确定为什么会这样,但我有一个简单的设置,其中调用者的返回值为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;
}
谢谢!
答案 0 :(得分:3)
您的代码按以下顺序执行:
retrieveDocuments
myXDSConsumerRequestHandler
如果在步骤1中抛出异常,则步骤2将永远不会发生。
通常,您不能同时抛出异常并返回值。
答案 1 :(得分:3)
如果retrieveDocuments()
抛出异常,那么它永远不会有机会返回一些东西。声明myXDSConsumerRequestHandler = RetrieveDocSetUtil.retrieveDocuments()
未正常完成。
无法从方法中捕获异常并接收返回值。
如果retrieveDocuments()
有一些有意义的东西,它甚至可以在遇到这些异常时返回给调用者,那么这个方法应该在内部捕获异常并返回一个适当的返回值,而不是允许异常传播到调用方法
答案 2 :(得分:0)
你的问题来自于甲基化物做得太多。它都获取RetrieveDocumentSetImpl并尝试使用它。
RetrieveDocumentSetImpl myXDSConsumerRequestHandler =
new RetrieveDocumentSetImpl(repoURL);
myXDSConsumerRequestHandler.retrieveDocumentSet(docRepoMap);
return myXDSConsumerRequestHandler;
将其分为两种方法:
RetrieveDocumentSetImpl myXDSConsumerRequestHandler =
new RetrieveDocumentSetImpl(repoURL);
return myXDSConsumerRequestHandler;
返回处理程序或失败,抛出异常,
myXDSConsumerRequestHandler.retrieveDocumentSet(docRepoMap);
然后你的调用者可以调用第一个方法,获取返回代码,然后如果他们选择尝试各种各样的东西,比如cal第二个,捕获他们抛出的异常异常。
答案 3 :(得分:0)
以下是我的建议