处理bean类中的自定义限制/异常?

时间:2012-05-29 17:56:25

标签: java design-patterns custom-data-type

我在我的应用程序中为自定义数据类型创建了一些自定义bean类,例如AddressPhoneNumberSpecialCode等。

这些自定义的非原始数据类型有自己的限制,我想用它们来应用,例如想到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长度必须为78位数等。 那么,在哪里适用这些规则?
在构造函数中?为:

//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类合并?
我不是一位经验丰富的程序员,想知道我应该在这里应用什么设计模式?

3 个答案:

答案 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是一个不错的选择。因此,在将数据分配给实例变量期间,可以检查其类型和其他参数。