首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java --如何将throwable转换为新的throwable并将其抛出?

Java --如何将throwable转换为新的throwable并将其抛出?
EN

Stack Overflow用户
提问于 2015-05-28 07:44:14
回答 6查看 3.4K关注 0票数 2

当异常发生时,当我获得Throwable时,我希望将其转换为MyThrowable并重新抛出它。

我正在实现一个实例创建的方法。

代码语言:javascript
复制
   obs1 = obs1.map(new Func1<Integer, Integer>() {
            public Integer call(Integer integer) {
             try {
                    getObj().equals(""); // an exception occurs
                    return ++integer;
                } catch (Throwable t) {
//                    t = new MyThroawable("",""); // if this is unmarked - failes to compile
                    throw t;
                }
            }
        });
  • 我需要处理Throwable,因为我的反应性fw (rxJava)在出错时返回一个throwable

从新的Throwable创建中移出备注时所得到的编译错误是

代码语言:javascript
复制
java: unreported exception async.job.MyThroawable; must be caught or declared to be thrown
EN

回答 6

Stack Overflow用户

发布于 2015-05-28 08:55:14

通常,您应该避免引发来自FuncX和ActionX实例的异常,并且不能直接抛出检查过的异常。

但是,如果您希望在引发检查异常的API上映射,则可以使用flatMap返回可观察到的常规值或可观察到的错误:

代码语言:javascript
复制
source.flatMap(integer -> {
    try {
        getObj().equals("")
        return Observable.just(++integer);
    } catch (Throwable t) {
        return Observable.error(OnErrorThrowable.addValueAsLastCause(t, integer));
    }
})
票数 4
EN

Stack Overflow用户

发布于 2015-05-28 07:47:23

您应该使用异常链接:

代码语言:javascript
复制
} catch (Throwable t) {
     throw new MyThroawable("Something failed", t);
}

您还应该使用在邮件中包含有用的信息来帮助确定出了什么问题(比如您正在处理的对象)。

async.job.MyThroawable :未报告的异常

Java不允许在不声明异常的情况下抛出检查过的异常。这是一个旧论战

修复方法是将throws MyThroawable添加到方法中(然后修复您将在其他地方获得的数百个编译错误)或使MyThroawable扩展RuntimeException (推荐)。

票数 2
EN

Stack Overflow用户

发布于 2015-05-28 07:45:39

你不能一个接一个地有两个抛出语句。

只需抛出您的自定义异常:

代码语言:javascript
复制
     public Integer call(Integer integer) throws MyThroawable 
     {
         try {
             getObj().equals(""); // an exception occurs
             return ++integer;
         } catch (Throwable t) {
             throw new MyThroawable("","");
         }
     }

您可能希望将原始的Throwable t传递给自定义异常的构造函数。

此外,如果MyThrowable是已检查的异常,则必须向public Integer call(Integer integer)方法中添加“抛出”子句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30500256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档