2014-10-04 30 views
0

我的任務是:「在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的實例?

回答

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例外。

+0

非常感謝! – user3637171 2014-10-04 09:43:28

相關問題