如果我抛出非法论据异常,我也想传递像"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";
在另一个类中,将所有自定义异常消息存储在一个文件中。这样我也可以在单元测试中使用消息,看看是否抛出了正确的异常,当我使用该函数时。我也可以重用这些消息。自定义异常也是如此,我宁愿将消息存储在另一个文件中。
问题是:如果异常有很多自定义消息,那么类可以变得非常大。
您使用大量自定义消息的方法是什么?
答案 0 :(得分:0)
我正在使用的团队使用的一种可能方法是创建自定义异常。所以,按照你的例子:
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
。