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



假设我们有一个构造函数/方法,它可以在不同场合抛出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()

相关内容

最新更新