构造函数 - 如果错误验证,则不创建任何对象

时间:2014-10-04 09:38:23

标签: java

我的任务是:"在SecuredNotepad构造函数中,如果密码不包含任何数字,请不要创建SecuredNotepad对象!"

public class SimpleNotepad {
private Page[] pages;

public SimpleNotepad(final int numberOfPages) {
    pages = new Page[numberOfPages];
    for (int i = 0; i < pages.length; i++) {
        pages[i] = new Page(String.valueOf(i + 1));
    }
}
}

public class SecuredNotepad extends SimpleNotepad {
private String pass;

public SecuredNotepad(int numberOfPages, String pass) {
    super(numberOfPages);
    if (pass.matches(".*\\d+.*") 
    {
        this.pass = pass;
    }
    else 
    {
        System.out.println("Password must contain at least one number!");
    }

}
}

在SecuredNotepad的构造函数中,我必须调用超级构造函数,因为SecuredNotepad扩展了SimpleNotepad。但是,在SecuredNotepad的构造函数中,我对参数String pass进行了验证(必须至少包含一个字母)。如果参数String pass未通过验证(我的意思是不包含任何字母),是否有任何可能的方法构造函数根本不会创建任何对象?如果没有,是否有任何方式创建的对象将是类SimpleNotepad的实例而不是SecuredNotepad的实例?

1 个答案:

答案 0 :(得分:5)

要防止构造函数构造,您只需要从构造函数中抛出异常:

public SecuredNotepad(int numberOfPages, String pass) {
    super(numberOfPages);
    if (pass.matches(".*\\d+.*")) {
        this.pass = pass;
    }
    else {
        throw new IllegalArgumentException("Password must contain at least one number!");
    }
}

有关exceptions tutorial中的例外情况的更多信息。