我正在实现 Accumulo BatchWriter接口(interface)在插入之前对记录执行一些额外的计算。如果出现问题,该计算可能会引发已检查的异常,但 BatchWriter 引发的唯一异常是 MutationsRejectedException 。因此,当我尝试执行的预处理过程中发生错误时,我无法抛出必要的已检查异常。
现在,我可以捕获已检查的异常,并简单地在其位置抛出另一个异常:要么是未检查的异常,例如某些 RuntimeException 或 MutationsRejectedException。这两个选项看起来都不太好 - 未经检查的异常是我想要实际抛出的异常的糟糕模拟,而抛出 MutationsRejectedException 不允许我看到错误的实际原因。
这里的最佳实践是什么?
最佳答案
"MutationsRejectedException wouldn't allow me to see the actual cause of the error."
是的MutationsRejectedException可以让您通过 chained exceptions 查看实际原因。 请注意构造函数中的“Throwable Cause”。 1.7版本代码;
try{
//...
} catch (Exception e) {
throw new MutationsRejectedException(null, null, (Map<TabletId,Set<SecurityErrorCode>>)null, null, 1, e);
}
.
try{
//...
} catch (MutationsRejectedException e) {
Throwable c = e.getCause();
if(c instanceof MyException){
//...
}else{
throw e;
}
}
关于java - 需要在实现中抛出检查异常,但接口(interface)没有抛出该异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295621/