如何检查特定例外,例如有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”。因此,坚持信息也不那么可靠。
答案 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
希望这有帮助。