Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception 在方法末尾抛出异常-错误的做法?_Exception_Methods - Fatal编程技术网

Exception 在方法末尾抛出异常-错误的做法?

Exception 在方法末尾抛出异常-错误的做法?,exception,methods,Exception,Methods,我在互联网上找到了这段代码,并用pseudo对其进行了重新表述,使其更具可读性 我无法忘记它在坏/好的实践、常识等方面有什么问题,我不是在谈论太多的回报,也不是在谈论是否抛出异常。它是关于方法围绕流的结构方式 如果一个方法出现在代码中,并在成功或不适用的情况下不断爆发,并且只有在没有任何东西让他返回时,它才会失败,最后出现异常,这看起来很奇怪。非常相似/精确 开关{ 案例:验证不需要;中断; 案例:验证不适用;中断; 案例:验证成功;中断; 默认值:抛出新异常() } 方法(顺便说一句,该方法

我在互联网上找到了这段代码,并用pseudo对其进行了重新表述,使其更具可读性

我无法忘记它在坏/好的实践、常识等方面有什么问题,我不是在谈论太多的回报,也不是在谈论是否抛出异常。它是关于方法围绕流的结构方式

如果一个方法出现在代码中,并在成功或不适用的情况下不断爆发,并且只有在没有任何东西让他返回时,它才会失败,最后出现异常,这看起来很奇怪。非常相似/精确

开关{
案例:验证不需要;中断;
案例:验证不适用;中断;
案例:验证成功;中断;
默认值:抛出新异常()
}
方法(顺便说一句,该方法也可以是非void方法,那么返回的将是some对象或其他对象):

public void validateMething(字符串param1,字符串param2)
抛出ValidationException{
if(param1==null | | param2==null){
//不需要或无法执行验证
返回;
}
字符串someValue=someLogicToGetIt();
if(someValue==null){
//不需要或无法进行验证
返回;
}
如果(someValue==“”){
//验证成功
返回;
}
//显然,验证没有成功
抛出新的ValidationException();
}

所以,我只是有这种感觉,还是有一些定义错误的实践规则,正是指这类方法,比如antipatern“像开关一样的故障切换到默认抛出异常”,或者这只是反模式“太多返回”和“流控制异常”的组合

这实际上取决于原始开发人员的意图

someValue!=“”

也许他们有

try 
{
    validateSomething(param1, param2)
}
catch (ValidationException e)
{
     //do stuff here
}

在他们代码的其他地方。虽然这可能不被视为最佳实践,但在最初实施时,他们可能有理由这样做

你的意思是除了使用异常来控制流之外?这根本不会改变情况。这与验证失败时引发异常无关。这与方法的结构有关。实际上,问题中提到了这一点,以防止出现这样的答案:)@radio假设
someLogicToGetIt()
使用param1和param2在方法中引发异常的位置?您是打算将异常移到方法中的其他位置还是完全消除它?根据你的评论,我不确定你到底在问什么。@在问题广播中,你还说这与多重回报无关。。。那是关于什么的?据我所知,使用多个返回被视为反模式,使用异常进行流控制被视为反模式。所以这里我们有两个反模式的组合,你说“这与他们无关”——还有什么关系呢?Hellyue,就像@Fildor提到的,代码有两个反模式:流控制异常和太多返回。很明显,他们不好。我只是想知道是否有第三种反模式,比如“类似开关的故障切换到默认抛出异常”之类的:)如果有人知道这种模式,我想知道它的名称。如果此代码只有前面提到的反模式,则可以。当我想到它时,看起来“像开关一样的故障切换到默认抛出异常”只是前面提到的两种异常的组合。啊,现在我明白了。是的,我想这种结构是两者结合所固有的。如果不这样做,余几乎无法将两者结合起来。