我在我的应用程序中为自定义数据类型创建了一些自定义bean类,例如Address
,PhoneNumber
,SpecialCode
等。
这些自定义的非原始数据类型有自己的限制,我想用它们来应用,例如想到PhoneNumber
:
public class PhoneNumber {
private String stdCode;
private String number;
public PhoneNumber() {
}
public PhoneNumber(String stdCode, String number) {
this.stdCode = stdCode;
this.number = number;
}
/* getters and setters */
}
现在令我困惑的是PhoneNumber
上的限制,即我想确保stdCode
必须以0
开头,或者number
长度必须为7
或8
位数等。
那么,在哪里适用这些规则?
在构造函数中?为:
//Custom costructor
public PhoneNumber(String stdCode, String number) {
if (!stdCode.matches("[0-9]+") || !number.matches("[0-9]+")){
throw new IllegalArgumentException("Error in Parsing. The STD Code and Number MUST be numeric digits.");
}
if (!"0".equals(stdCode.substring(1, 2))){
throw new IllegalArgumentException("The STD Code must begins with 0");
}
if (stdCode.length() < 3 || stdCode.length() > 5){
throw new IllegalArgumentException("The STD Code must be 3 to 5 digits long. Current Number of digits: " + stdCode.length() + ". ");
}
this.stdCode = stdCode;
this.number = number;
}
或者也可以有自定义例外?我应该在哪里将这些自定义异常与我的bean类合并?
我不是一位经验丰富的程序员,想知道我应该在这里应用什么设计模式?
答案 0 :(得分:1)
您可以通过抛出PropertyVetoException来否决对属性的更新。请参阅此处以获取示例和说明:http://weblogs.java.net/blog/malenkov/archive/2007/11/how_to_veto_a_p.html
答案 1 :(得分:1)
你应该创造吸气剂和放大器手机的设置者#parts和你在setter中验证检查
答案 2 :(得分:1)
在输入期间验证输入总是更好。使用Getter和Setter是一个不错的选择。因此,在将数据分配给实例变量期间,可以检查其类型和其他参数。