Jai*_*e A 1 java validation exception
我想抛出一个异常,以使用户知道年龄值输入应在1到120之间。在下面的示例中查找。
有没有更好的方法引发异常?
public class Lesson18Encapsulation3 {
private int age;
private String name;
private int salary;
public int getAge() {
return age;
}
public void setAge(int age) {
if ( age < 0 && age >= 120)
this.age = age;
throw new IllegalArgumentException (" age can not be negative or more than 120");
//getters and setters
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Lesson18Encapsulation3 {
private int age;
private String name;
private int salary;
public int getAge() {
return age;
}
public void setAge(int age) {
if ( age < 0 && age >= 120)
this.age = age;
throw new IllegalArgumentException (" age can not be negative or more than 120");
//getters and setters
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
原则上,您在这里所做的是按合同进行设计的一个实例:您正在定义方法的前提条件。
A)错误条件
您的情况不对。您想在完全相反的情况下引发异常:
if(age < 0 || age >= 120) {
// Throw exception
}
Run Code Online (Sandbox Code Playgroud)
(@Nikolas在较早的帖子中也指出了这一点)
B)根据合同明确设计
我将通过提供一种断言方法来明确这一点:
private void setAge(int age) {
assertCorrectAge(age);
this.age = age;
}
private void assertCorrectAge(int age) {
if(age < 0 || age >= 120) {
throw new IllegalArgumentException(" ... ");
}
}
Run Code Online (Sandbox Code Playgroud)
有人会建议使用Java的build in assert
关键字。我建议不要这样做,因为在大多数JVM版本中都禁用了它(因此它不会触发)。
C)使用图书馆
有许多断言检查条件的方法,加起来很多样板代码。您可以让一个图书馆来解决这个问题(例如Google的Guava):
public void setAge(int age) {
Preconditions.checkArgument(age >= 0, "negative age: %s", age);
Preconditions.checkArgument(age < 120, "age too high: %s", age);
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
566 次 |
最近记录: |