如何检查特定异常,例如SocketException
并带有消息“套接字已关闭”
?我们可以这样比较字符串:
if (exception.getMessage().equals("Socket closed"))...
但是有没有一些更优雅的方法,比如比较错误代码,或者与常量异常值比较?
除非SocketException
始终为“Socket已关闭”
,但在文档中它指出此类是所有套接字异常的父类(super class),因此有多个。
更新:
我不想检查异常类。如果我这样做,我会使用专门的 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")) { ... }
}
在这种特殊情况下,我抛出异常来显示它的含义,但实际上它可能是不受我控制的代码。
我还注意到,在一种特定情况的方法中,异常消息抛出“套接字已关闭”,在另一种不同的方法中,抛出“套接字已关闭”。所以坚持消息也不太可靠。
最佳答案
您的问题有不同的方法,具体取决于您想要实现的目标。确定是否有所需异常的最简单方法是使用 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!!
}
这些充当您似乎正在寻找的“错误代码” - 类的确定性标识。
但是,如果您确实对人类可读的错误内容感兴趣,那么您拥有的解决方案应该是您的实现。这似乎不太可能,但有时这正是所需要的。
关于Android:如何检查特定异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489331/