如何判断抛出了哪一种相同类型的异常?

时间:2017-11-05 15:42:15

标签: java exception exception-handling

假设我们有一个构造函数/方法在不同的场合抛出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的情况下,检查提供的原因,或使用不同类型的异常(这在例如解析方法中似乎不合适)。这个问题有一般解决方案吗?

2 个答案:

答案 0 :(得分:1)

你可以为这两种情况编写自己的特定异常,从而扩展illegalArgumentException

编辑:正如Alex Shesterov已经说过的那样

答案 1 :(得分:0)

您可以在catch块中查看e.getMessage()