处理无法访问的异​​常类型

时间:2015-01-16 14:53:47

标签: java exception

我正在使用第三方库,该库具有针对不同方案的一些非常特定的异常类型。我想像这样使用它们(有点简化的版本):

try
{...}
catch (IllegalFooOperationException e)
{
    //handle an illegal foo
}
catch (InvalidBarValueException e)
{
    //handles very differently from the illegal foo.
}

不幸的是,IllegalFooOperationExceptionInvalidBarValueException 不是公共类:它们是包范围的。它们继承自更通用的公共GenericThirdPartyAPIException类。

现在,这种工作:

catch (GenericThirdPartyAPIException e)
{
    String rootExceptionTypeName = e.getClass().getName();
    if (rootExceptionTypeName.equals("someAPI.IllegalFooOperationException"))
    {
        //handle illegal foo
    }
    else if (rootExceptionTypeName.equals("someAPI.InvalidBarValueException"))
    {
        ...
    }
}

但这感觉不对。一个潜在的问题是,如果将来在此库中更改包或类名,则此代码将无法在运行时找到正确的异常类。如果我不需要,我不喜欢在运行时依赖于计算对象的类。

我还想过尝试直接解析异常消息,但是我感兴趣的一些例外(并非所有这些都在这里显示)可能具有相同的消息,但是不同的类型。

有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:2)

在初始化中,您可以执行一个方法,该方法肯定会抛出 IllegalFooOperationException 并将异常的类保存在变量中。 对其他异常做同样的事情,你应该拥有所有异常类。

我知道这不是一个好习惯(因为包受保护的异常也是如此)但你可以在运行时找到正确的异常类。