当异常发生时,当我获得Throwable时,我希望将其转换为MyThrowable并重新抛出它。
我正在实现一个实例创建的方法。
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创建中移出备注时所得到的编译错误是
java: unreported exception async.job.MyThroawable; must be caught or declared to be thrown发布于 2015-05-28 08:55:14
通常,您应该避免引发来自FuncX和ActionX实例的异常,并且不能直接抛出检查过的异常。
但是,如果您希望在引发检查异常的API上映射,则可以使用flatMap返回可观察到的常规值或可观察到的错误:
source.flatMap(integer -> {
try {
getObj().equals("")
return Observable.just(++integer);
} catch (Throwable t) {
return Observable.error(OnErrorThrowable.addValueAsLastCause(t, integer));
}
})发布于 2015-05-28 07:47:23
您应该使用异常链接:
} catch (Throwable t) {
throw new MyThroawable("Something failed", t);
}您还应该使用在邮件中包含有用的信息来帮助确定出了什么问题(比如您正在处理的对象)。
async.job.MyThroawable :未报告的异常
Java不允许在不声明异常的情况下抛出检查过的异常。这是一个旧论战。
修复方法是将throws MyThroawable添加到方法中(然后修复您将在其他地方获得的数百个编译错误)或使MyThroawable扩展RuntimeException (推荐)。
发布于 2015-05-28 07:45:39
你不能一个接一个地有两个抛出语句。
只需抛出您的自定义异常:
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)方法中添加“抛出”子句。
https://stackoverflow.com/questions/30500256
复制相似问题