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



如果抛出非法参数异常,我还想传递"Value can not 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");
    }
}

通过这种方式,您可以在测试中检查是否抛出了正确的异常。我们倾向于为每个类设置这些自定义异常的范围,但这取决于您希望的粒度。如果上面是针对Person类的,那么我们会得到以下内容:

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

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

最新更新