1

我已经为我的应用程序中的自定义数据类型创建了一些自定义 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 */

}

现在让我感到困惑的是对 a的限制PhoneNumber,即我想确保stdCode必须以 a 开头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 类合并?
我不是经验丰富的程序员,想知道我应该在这里应用什么设计模式?

4

3 回答 3

1

您可以通过抛出 PropertyVetoException 来否决对属性的更新。有关示例和说明,请参见此处:http ://weblogs.java.net/blog/malenkov/archive/2007/11/how_to_veto_a_p.html

于 2012-05-29T17:59:25.523 回答
1

你应该为你的手机#部件创建getter和setter,并在setter中进行验证检查

于 2012-05-29T18:02:34.340 回答
1

在输入时验证输入总是更好的。使用 Getter 和 Setter 是一个不错的选择。所以在将数据赋值给实例变量的过程中,可以检查其类型和其他参数。

于 2012-05-29T18:06:02.637 回答