我的任务是:"在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的实例?
答案 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中的例外情况的更多信息。