Java-可抛出到异常

Java-可抛出到异常,java,exception,throwable,Java,Exception,Throwable,我目前正在使用play2框架 我有几个类正在抛出异常,但是play2s globalonError处理程序使用throwable而不是异常 例如,我的一个类正在抛出一个NoSessionException。如果一个可丢弃的对象是NoSessionException,我可以检查它吗 如果可丢弃对象是异常,我可以检查它吗 当然可以: 您可以使用instanceof检查它是否属于NoSessionException 例如: if (exp instanceof NoSessionException)

我目前正在使用play2框架

我有几个类正在抛出异常,但是play2s global
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);
 }