Java中的异常类组织

时间:2012-04-12 16:44:45

标签: java exception code-organization file-organization

我有很多异常类。 F.e。:InvalidMethodParameterException,EntityNotFoundException等。所有都有一些代码,如xxx.yyy.zzz和描述文字。 问题是:是否有任何最佳实践和技术来组织类及其代码/文字。现在,我正在做的方法是将所有代码和文字放在其他类甚至属性文件中((。在我看来非常令人讨厌,因为要添加一个例外,我必须对其他文件进行另一个更改,而不是一个抛出异常,我使用一个静态方法的类,它抛出它们。这些方法和方法不是由我创建的,而是我工作的地方。所以我想提供其他更有效的方法。例如,当我提供使用只是简单地存储每个异常文字和代码在自己的类中,他们只是忽略说它是无效和不好的做法。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我认为,提升开发人员效率的系统架构将远远超过提升执行效率的系统架构,因为前者可以很容易地包含后者。如果对单个模块进行更改需要您打开和修改多个模块,则该设计不会提高开发人员的效率。 My very favorite programming book建议异常处理程序激发异常类型。如下所示:

Version 1:
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws MyException
    } catch (MyException e) {
        if (e.errorMessage == "Try a different argument")
            tryToDoSomething(!arg);
        else if (e.errorMessage == "Try again")
            tryToDoSomething(arg);
    }
}
Version 2:
//Split the exception so that it can be handled differently
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws InvalidArgumentException, NotReadyException
    } catch (InvalidArgumentException e) {
        tryToDoSomething(!arg);
    } catch (NotReadyException e) {
        tryToDoSomething(arg);
    }
}

现代编译器可以优化抛出,使版本2显着更快,除了自我记录。这就是实际创建异常的原因,作为用户定义的类型,编译器可以理解这些类型来替换以前必须传递并手动检查的钝角错误代码。

无论如何,如果错误代码旨在触及用户,我会认为它们不是例外而是错误,应该抛出。你可以设计像ErrorFactory这样的东西,它会获取一个字符串错误代码并抛出正确的派生类型,或者你可以直接抛出。另一方面,如果错误代码到达用户,为什么还要使用它们呢?

答案 1 :(得分:0)

您可以将它们全部集中到一个类中,这会将所有内容放入一个外部类中:

public OurExceptionsClassTM {

    static final String
        ERROR1 = "123.acd.243",
        ERROR2 = "124.axd.543",
        ... ;

    public static class InvalidMethodParameterException extends Exception { ... }
    ...

    public static throwSpecialException(){ ... }
    ...

}

解决了必须更改多个文件的问题,并且或多或少地保持了您的同事习惯的方式。

您也可以通过例如每个项目具有不同的外部扩展类来使其更加模块化。关键是与任何给定异常相关的所有内容仍将与该异常保持一致。