java - 需要在实现中抛出检查异常,但接口(interface)没有抛出该异常?

标签 java exception accumulo

我正在实现 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/

相关文章:

java - 在 Java 中处理异常 - 如何给用户另一次机会?

hadoop - VirtualBox CentOS 6.4中Accumulo初始化异常

mysql - Acculo 中的模式/数据库

java - 我应该比较我类(class)的 "equals"方法中的所有字段吗?

java - 程序不会在前一次排序后对数组进行排序

java - 卡在 while 循环中。进行中

mysql - 通过NodeJS + MySQL登录时捕获异常错误

java - 如何使用 Apache http 客户端的 URIBuilder 在 HTTP 请求中发送正文?

java - 查找 IP 地址 - UnknownHost 异常

hadoop - 无法使用sqoop2将数据从Oracle导入Accumulo