0

在测试最终用户插入的参数时使用异常或流控制更好吗?伪代码:

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..
}
}

我读过抛出异常非常昂贵。这是否意味着只要有可能不抛出它们,我们就必须避免抛出它们试图控制问题?

谢谢,确实是

4

2 回答 2

0

IllegalArgumentException当 API 方法(即公共或受保护的)接收到违反其协定的参数时应该抛出,例如,如果参数是或空字符串,您的方法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);
    }
}
于 2013-09-29T20:13:44.440 回答
0

但是在你的第二个实现中,你必须在同一个类中处理错误情况,我的意思是一个单独的错误处理程序模块是一种更好的方法,在我看来,分离方面和对类应用单一职责是一种更好的实现方式

于 2013-09-29T19:36:24.747 回答