如果boolean为false,则捕获异常

时间:2017-07-14 22:33:44

标签: exception-handling try-catch

这是复杂问题的最简单示例。我没有在整个互联网的任何地方找到这个问题的例子。我正在验证返回Boolean的validationMethod中的输入。现在,我需要在调用类时使用此方法(如果return为true则运行flow,如果return为false则捕获异常)。

public class StringUtil{
    public static boolean validateNumInput(String UserInput)
    {
        if(UserInput.matches("[0-9]+")){
            return true;
        } return false;
    }   
}
public class Main{
    public static void main(String[] args){
        String a="012*+";
        try{
            if(StringUtil.validateNumInput(a)){
            System.out.println(StringUtil.validateNumInput(a)); 
        }       

        }catch(Exception e){
            System.out.println("Big problem");
        }       
    }   
}

1 个答案:

答案 0 :(得分:0)

根据the documentation,您可以使用布尔谓词过滤catch子句。因此,您的验证方法需要抛出一个可以在catch子句中过滤的异常。但是,如果您正在这样做,您可能还可以滚动自己的自定义异常,而不必处理布尔值。另一种选择是,在您的调用代码中,将返回代码视为返回代码并抛出您自己的异常。

选项1:

public class StringUtil{
    public static boolean validateNumInput(String UserInput)
    {
        if(UserInput.matches("[0-9]+")){
            return true;
        }
        throw new Exception ("Validation failed!");
    }   
}

public class Main{
    public static void main(String[] args){
        String a="012*+";
        try{
            if(StringUtil.validateNumInput(a)){
                System.out.println(StringUtil.validateNumInput(a)); 
            }
        }catch(Exception e) when (e.Message == "Validation failed!") {
            System.out.println("Big problem");
        }       
    }   
}

选项2:

public class Main{
    public static void main(String[] args){
        String a="012*+";
        try{
            if(StringUtil.validateNumInput(a)){
                System.out.println(StringUtil.validateNumInput(a)); 
            } else {
                throw new Exception ();
            }
        }catch(Exception e) {
            System.out.println("Big problem");
        }       
    }   
}