Java 在文件或类中存储自定义异常消息

Java 在文件或类中存储自定义异常消息,java,exception,Java,Exception,如果抛出非法参数异常,我还希望传递原因,如“Value cannot be negative”或类似的内容。我不喜欢这样的代码: public void setAge(int age) { if (age >= 0) { this.age = age; } else { throw new IllegalArgumentException("Age can not be negative"); } } 我在想类似的事情 public

如果抛出非法参数异常,我还希望传递原因,如
“Value cannot be negative”
或类似的内容。我不喜欢这样的代码:

public void setAge(int age) {
    if (age >= 0) {
        this.age = age;
    } else {
        throw new IllegalArgumentException("Age can not be negative");
    }
}
我在想类似的事情

public static final String AGE_CAN_NOT_BE_NEGATIVE = "Age can not be negative";
在另一个类中,将所有自定义异常消息存储在一个文件中。这样,我也可以在单元测试中使用消息,以查看在使用函数时是否引发了正确的异常。我还可以重用这些消息。自定义异常也是如此,我更愿意将消息存储在另一个文件中

问题是:如果异常有很多自定义消息,那么类可能会变得非常大


您处理大量自定义消息的方法是什么?

我所在的团队使用的一种可能的方法是创建自定义异常。因此,以您的例子为例:

public void setAge(int age) {
    if (cost >= 0) {
        this.age = age;
    } else {
        throw new AgeIllegalArgumentException();
    }
}

...

private class AgeIllegalArgumentException extends IllegalArgumentException {
    public AgeIllegalArgumentException() {
        super("Age can not be negative");
    }
}
通过这种方式,您可以在测试中检查是否抛出了正确的异常。我们倾向于为每个类定义这些自定义异常的范围,但这取决于您希望的粒度。如果上述内容是针对
人员
类的,我们将有以下内容:

private class PersonIllegalArgumentException extends IllegalArgumentException {
    public PersonIllegalArgumentException(String msg) {
        super(msg);
    }
}

在上面的示例中,如果需要访问错误消息,您也可以使用静态
字符串,将这两种解决方案结合起来。

我所在的团队使用的一种可能的方法是创建自定义异常。因此,以您的例子为例:

public void setAge(int age) {
    if (cost >= 0) {
        this.age = age;
    } else {
        throw new AgeIllegalArgumentException();
    }
}

...

private class AgeIllegalArgumentException extends IllegalArgumentException {
    public AgeIllegalArgumentException() {
        super("Age can not be negative");
    }
}
通过这种方式,您可以在测试中检查是否抛出了正确的异常。我们倾向于为每个类定义这些自定义异常的范围,但这取决于您希望的粒度。如果上述内容是针对
人员
类的,我们将有以下内容:

private class PersonIllegalArgumentException extends IllegalArgumentException {
    public PersonIllegalArgumentException(String msg) {
        super(msg);
    }
}

在上面的示例中,如果您需要访问错误消息,也可以使用静态
字符串
,将这两种解决方案结合起来。

我也在考虑这一点,但我尽量避免自定义异常,因为这会增加类的数量。一个
IllegalArgumentException
是每个开发人员都熟悉的东西,当stacktrace打印出抛出类的地方时,您应该很快发现您的编码/使用错误。例如,我将使用GUI的消息。尽管如此,我还是希望在另一个文件中定义消息,然后用这些字符串创建一个自定义异常。我并不是到处提倡这种模式,但我们的代码中有一些部分我认为是合理的。此外,它还有助于测试,因为您可以检查代码的某些部分是否引发特定的异常。我也在考虑这一点,但我尽量避免自定义异常,因为它会使类数量膨胀。一个
IllegalArgumentException
是每个开发人员都熟悉的东西,当stacktrace打印出抛出类的地方时,您应该很快发现您的编码/使用错误。例如,我将使用GUI的消息。尽管如此,我还是希望在另一个文件中定义消息,然后用这些字符串创建一个自定义异常。我并不是到处提倡这种模式,但我们的代码中有一些部分我认为是合理的。此外,它还有助于测试,因为您可以检查代码的某些部分是否引发特定异常。