Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的异常类组织_Java_Exception_Code Organization_File Organization - Fatal编程技术网

Java中的异常类组织

Java中的异常类组织,java,exception,code-organization,file-organization,Java,Exception,Code Organization,File Organization,我有很多例外类。F.e.:InvalidMethodParameterException、EntityNotFoundException等都有一些代码,如xxx.yyy.zzz和描述文字。 问题是:是否有组织类及其代码/文本的最佳实践和技术。现在,我所做的是将所有代码和文字放在其他类中,甚至是属性文件中((.对我来说,这看起来非常复杂,因为要添加一个异常,我必须对其他文件进行另一个更改,而不是一个。要引发异常,我使用一个带有静态方法的类,该类会引发异常。这些方法和方法不是我创建的,而是我工作的地

我有很多例外类。F.e.:InvalidMethodParameterException、EntityNotFoundException等都有一些代码,如xxx.yyy.zzz和描述文字。 问题是:是否有组织类及其代码/文本的最佳实践和技术。现在,我所做的是将所有代码和文字放在其他类中,甚至是属性文件中((.对我来说,这看起来非常复杂,因为要添加一个异常,我必须对其他文件进行另一个更改,而不是一个。要引发异常,我使用一个带有静态方法的类,该类会引发异常。这些方法和方法不是我创建的,而是我工作的地方。因此我想提供其他更有效的方法。例如,当我提出只使用将每个异常文本和代码存储在自己的类中,他们只是忽略了,说这是低效和糟糕的做法


任何帮助都将不胜感激!

您可以将它们集中到一个类中,这将把所有内容都放在一个外部类中:

public OurExceptionsClassTM {

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

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

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

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


您还可以将其模块化一点,例如,通过为每个项目使用不同的外部扩展类。关键是,与任何给定异常相关的所有内容都将与该异常保持在一起。

您可以将所有内容集中到一个类中,从而将所有内容放在一个外部类中:

public OurExceptionsClassTM {

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

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

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

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


您还可以将其模块化一点,例如,通过为每个项目使用不同的外部扩展类。关键是,与任何给定异常相关的所有内容都将与该异常保持一致。

我认为,提高开发人员效率的系统架构将远远优于提高开发人员效率的系统架构tes执行效率,因为前者可以轻松涵盖后者。如果更改单个模块需要打开和修改多个模块,则设计不会提高开发人员的效率。建议异常处理程序激发异常类型。如下所示:

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的东西,它会接受字符串错误代码并抛出正确的派生类型,或者您可以直接抛出。另一方面,如果错误代码没有接触到用户,为什么还要麻烦使用它们呢?

我认为提高开发人员效率的系统架构远远优于提高执行效率的系统架构,因为前者可以轻松涵盖后者。如果对单个模块进行更改需要打开和修改多个模块,则design没有提高开发人员的效率。建议由异常处理程序激发异常类型。如下所示:

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的东西,它会接受字符串错误代码并抛出正确的派生类型,或者您可以直接抛出。另一方面,如果错误代码不要联系到用户,为什么要麻烦使用它们?

我更喜欢将与异常相关联的错误代码保存在使用它们的异常类中。但是,说服喜欢将它们全部保存在一个位置的人可能很难,因为“全部在一个位置”可以让您很好地查看一个位置的所有错误代码。我更喜欢erro与异常关联的r代码必须保存在使用它们的异常类中。但是,说服那些更愿意将它们保存在一个位置的人可能很难,因为“所有在一个位置”可以让您很好地查看一个位置的所有错误代码。这就是方法(+1)。(关于参考资料:我觉得这本书更有趣“干净的代码”比它是你最喜欢的编程书更有趣;@DaveBall啊,是的,这只是一些夸大的自我重要性,一点也不介意:这就是做它的方法(+1)。(关于参考:我发现它是一本“干净的代码”比你最喜欢的编程书更有趣;)@达维鲍尔啊,是的,那只是一些夸大的自我重要性,一点也不介意:D