2014-10-20 36 views
0

我目前正在研究Java中的學生項目(Android是具體的)。假設我有一個單擊按鈕時調用的函數。這個方法必須調用其他一些短的私有函數(返回true/false),以便檢查例如:用戶輸入的有效名稱,文件夾創建是否正常,文件是否被成功複製等等。在移動到另一個之前必須檢查這些東西活動。嘗試抓住而不是多個if語句

  1. 的方式來做到這一點是通過調用多個「IFS」與「迴歸」一旦有事,出了問題:

    public void onClickButton(View view) { 
    
        if(validData()) { 
         showErrorMsg("Wrong input!"); 
         return; 
        } 
    
        if(selectedFileExists()) { 
         showErrorMsg("File does not exist!"); 
         return; 
        } 
    
        if(createFolder()) { 
         showErrorMsg("Error during folder creation!"); 
         return; 
        } 
    
        (...) 
    } 
    
  2. 它不壞,但我想以取代那些短布爾函數拋出其在onClickButton(釣到異常void的方法),例如:

    public void onClickButton(View view) { 
    
        try { 
         validData(); 
         selectedFileExists(); 
         createFolder(); 
         (...)   
        } 
        catch (MyException e) { 
         showErrorMsg(e); 
         return; 
        } 
    } 
    
    
    private void createFolder() throws MyException { 
        if(!projectFolder.mkdir()) 
          throw new MyException("Error during folder creation!"); 
    } 
    

那麼你對第二種方法有什麼看法?在這種情況下使用例外是否可以接受?

+3

一般來說,在例外的情況下應該使用'Exception(s)'。你對基元的測試會更快。 – 2014-10-20 20:08:43

+0

是的,這是爲此設計的例外正是你應該如何使用和例外。 – brso05 2014-10-20 20:09:18

回答

0

好吧,讓我們說,第一位不一致,你的方法有壞名字(方法是動詞,可以這麼說,而你的方法並沒有描述他們可能做什麼)。此外,我希望您的方法在故障時返回false,而不是true。我想像更好的名字是isValidData,doesSelectedFileExisttryCreateFolder。我也會切換邏輯,所以布爾返回值與方法名稱一致。

這就是說,讓我們來看看第二個代碼段。例外情況是出乎意料的行爲。我認爲你的方法是預計要麼返回true或false,而不是一個例外。另外,應允許異常處理冒泡到更高級別的異常處理程序。

堅持第一部分與我所概述的變化。

+0

謝謝,那些只是虛構的功能,在我的代碼中它們有不同的名稱;) 我讀過幾篇關於使用異常的說法,我傾向於一種說法,即它們不適合我的目的。所以我想我會堅持'ifs'......但該死......這個試試看起來很整齊! :D – rafakob 2014-10-20 20:15:46

+0

@rafakob我絕對會拋出* exception *行爲的異常,併爲異常添加更多信息/上下文,但我不會爲了控制邏輯流而拋出異常。下面是關於這個主題的一個很好的程序員.stackoverflow.com討論:http://programmers.stackexchange.com/questions/189222/are-exceptions-as-control-flow-considered-a-serious-antipattern-if-so-why – tnw 2014-10-20 20:17:25

0

只要代碼簡潔易讀,您可以通過第二種方法創建它。 一些我可以給你

  1. 創建獨立的類進行驗證(這個類應該擴展Exception類)
  2. 創建,如日期,電話號碼等,在一個單獨的函數的所有驗證方法的提示。這樣你可以提高代碼的可讀性並保持模塊化。