如果抛出非法参数异常,我还想传递"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
,将两种解决方案结合起来。