Java-可抛出到异常
我目前正在使用play2框架 我有几个类正在抛出异常,但是play2s globalJava-可抛出到异常,java,exception,throwable,Java,Exception,Throwable,我目前正在使用play2框架 我有几个类正在抛出异常,但是play2s globalonError处理程序使用throwable而不是异常 例如,我的一个类正在抛出一个NoSessionException。如果一个可丢弃的对象是NoSessionException,我可以检查它吗 如果可丢弃对象是异常,我可以检查它吗 当然可以: 您可以使用instanceof检查它是否属于NoSessionException 例如: if (exp instanceof NoSessionException)
onError
处理程序使用throwable而不是异常
例如,我的一个类正在抛出一个NoSessionException
。如果一个可丢弃的对象是NoSessionException
,我可以检查它吗
如果可丢弃对象是异常,我可以检查它吗
当然可以:
您可以使用
instanceof
检查它是否属于NoSessionException
例如:
if (exp instanceof NoSessionException) {
...
}
假设
exp
是可丢弃的
参考。是一个异常
的类,因此它的所有子类都是子类。除了检查它是否是instanceof
之外,没有什么可以阻止您在可丢弃的上使用instanceof
,您可以使用try-catch和catch-NoSessionException
try {
// Something that throws a throwable
} catch (NoSessionException e) {
// Its a NoSessionException
} catch (Throwable t) {
// catch all other Throwables
}
把它简短一点。我们可以将Throwable
传递给Exception
构造函数
@Override
public void onError(Throwable e) {
Exception ex = new Exception(e);
}
从Android上看,Throwable是所有异常的超类。您可以捕获一个可丢弃的对象,然后询问它的类,看看它是否是NoSessionException或其他什么。谢谢大家快速回答。当然,您也可以捕获NoSessionException,然后将其传递给需要Throwable的接口——因为Throwable是超类,接口将接受NoSessionException。(如果捕获所有Throwable,则不应忽略未选择的Throwable,而应重新抛出它们。)但是,这样做会丢失堆栈跟踪数据:-(@BrianKnoblauch-Android还提供了另一个构造函数来保存StackTrace.Exception(字符串消息、可丢弃原因、布尔启用抑制、布尔可写StackTrace)
@Override
public void onError(Throwable e) {
Exception ex = new Exception(e);
}