处理异常的方法参数与流控制[重复]

问题描述 投票:0回答:2
在测试最终用户插入的参数时,使用异常或流控制更好吗?伪代码:

class A{ List listOfPeople; public void insertName(String name) { //if the name is not inserted in the registry it throws a runtime exception throw new IllegalArgumentException("Please insert a registered name"); } }

或者也许最好执行以下操作:

class A{ List listOfPeople; public void insertName(String name) { if (!listOfPeople.contains(name){ System.out.println("name not in the list, please insert a registered name"); reInsertName(); } else ..do stuff.. } }

我已经读到抛出异常非常昂贵。这是否意味着只要有可能不抛出异常,我们就必须避免抛出异常以试图对问题进行流程控制?

谢谢,的确是

java exception control-flow
2个回答
0
投票
但是在您的第二种实现中,您必须在同一类中处理错误情况,我的意思是,单独的错误处理程序模块是一种更好的方法,在我看来,分离方面和对类应用单一职责是一种更好的实现方式

0
投票
IllegalArgumentException如果参数为insertName或为空字符串,则方法null可能会抛出一个。

这种简单的检查放在开头,并且应记录参数的约束。引发异常以指示客户端代码(使用该方法的代码)中的错误。

在您的情况下,对参数的约束更多地在业务逻辑方面,它们取决于程序状态(该名称先前已添加到某些列表中)。用IllegalArgumentException指示程序状态无效似乎不正确。如果有,那么IllegalStateException会更好。

但是我不会那样设计。怎么样再OO:

public class A { List listOfPeople; public static class Registration { private final String name; private Registration(String name) { this.name = name; } public void insert() { // ha, no need of exception throwing, because the person had to be registered first! } } public Registration register(String name) { listOfPeople.add(name); return new Registration(name); } }

© www.soinside.com 2019 - 2024. All rights reserved.