假设我们有一个构造函数/方法,它可以在不同场合抛出IllegalArgumentException
:
class MyClass {
MyClass(char char1, char char2) {
if(condition1 on char1 and char2) {
throw new IllegalArgumentException("condition1 failed");
}
if(different condition2 on char1 and char2) {
throw new IllegalArgumentException("condition2 failed");
}
...
}
}
如果我想用无效参数构造一个MyClass
实例,我如何判断抛出了哪个异常?
try {
MyClass clazz = new MyClass('a', 'a');
} catch (IllegalArgumentException e) {
// which one?
}
一个丑陋的解决方案是检查详细信息消息,或者在IllegalArgumentException
的情况下,检查提供的原因,或使用不同类型的异常(这在解析方法中似乎不合适)。这个问题有通用的解决方案吗?
你可以为这两种情况编写你自己的特定例外,从而扩展 illegalArgumentException
编辑:正如亚历克斯·谢斯特罗夫已经说过的那样
您可以在 catch 块中检查e.getMessage()
。