Android:如何检查特定的异常?

时间:2015-11-03 00:12:29

标签: android exception

如何检查特定例外,例如有SocketException消息的"Socket closed"?我们可以比较这样的字符串:

if (exception.getMessage().equals("Socket closed"))...

但是有一些更优雅的方法,比如比较错误代码,还是与常量异常值进行比较?

除非SocketException总是"Socket closed",但在文档中它声明此类是所有套接字异常的超类,因此不止一个。

更新: 我不想检查异常类。如果我这样做,我会使用专门的catch而不是明确检查一个类:

catch (SocketException ex) { ... }

我想要一些更优雅的方法来区分两个异常,它们是同一个类的实例,而不是通过比较这样的字符串:

try {
    int i = 2;
    if (i == 1) throw new SocketException("one");
    else if (i == 2) throw new SocketException("two");
}
catch (SocketException ex) {
    if (ex.getMessage().equals("one")) { ... }
}

在这种特殊情况下,我会抛出异常以显示它的含义,但实际上它可能是不受我控制的代码。

另外我注意到一个特殊情况下的异常消息抛出“Socket closed”,另一个不同的方法抛出“Socket is closed”。因此,坚持信息也不那么可靠。

2 个答案:

答案 0 :(得分:2)

您的问题有不同的方法,具体取决于您要实现的目标。确定您是否有所需例外的最简单方法是使用instanceof,因为Exception也是一个类,即:

if (myException instanceof SocketException) {
    ...
}

但是,然后添加消息内容的要求或者Exception抛出的可能性实际上是您感兴趣的Exception的子类。在"子类"的情况下你可以检查它是否是一个子类:

if (myException instanceof SocketException && 
    myException.getClass() != SocketException.class) {
    // then I'm an instance of a subclass of SocketException, but not SocketExcpetion itself
}

或者相反,只评估父类:

if (myException instanceof SocketException && 
    myException.getClass() == SocketException.class) {
    // then I'm an instance of the class SocketException, and not a cubclass of SocketExcpetion!!
}

这些用作"错误代码"你好像在寻找 - 确定这个阶级的确定。

但是,如果您真的对人类可读的错误内容感兴趣,那么您的解决方案应该是您的实现。这似乎不太可能,但有时候这就是必需的。

答案 1 :(得分:0)

您可以使用:

exception.getClass().getSimpleName()并将其与SocketException

进行比较

希望这有帮助。