尝试catch而不是多个if语句

时间:2014-10-20 20:03:58

标签: java if-statement try-catch

我目前正在研究Java中的学生项目(Android具体而言)。让我们说我有一个单击按钮时调用的函数。此方法必须调用少数其他短私有函数(返回true / false)以便检查例如:用户输入的有效名称,文件夹创建是否正常,文件是否已成功复制等。在移动到另一个之前必须检查这些事情活性。

  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. 它还不错,但我正在考虑用void方法替换那些短布尔函数,这些方法会抛出onClickButton()中的异常,例如:

    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. 那你对第二种方法有什么看法?在这种情况下使用例外是否可以接受?

2 个答案:

答案 0 :(得分:0)

好吧,让我们说第一位是不一致的,你的方法有不好的名字(方法是动词,可以这么说,你的方法并没有描述他们可能在做什么)。另外,我希望您的方法在失败时返回false,而不是true。我想更好的名字是isValidDatadoesSelectedFileExisttryCreateFolder。我也会切换逻辑,因此布尔返回值与方法名称一致。

话虽如此,让我们进入第二个代码段。例外情况是特殊行为。我认为您的方法期望要么返回true,要么返回false,而不是异常。另外,应该允许异常处理冒泡到更高级别的异常处理程序。

坚持我所概述的第一部分。

答案 1 :(得分:0)

只要代码简洁易读,您就可以通过Second方法创建它。 我可以给你的一些提示

  1. 创建用于验证的Seperate类(此类应扩展Exception类)
  2. 在单独的功能中创建所有验证方法,如日期,电话号码等。这样,您可以提高代码的可读性并使其保持模块化。