在测试最终用户插入的参数时,使用异常或流量控制是否更好? 伪代码:
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..
}
}
我已经知道抛出异常是非常昂贵的..这是否意味着只要有可能不抛出异常,我们就必须避免让它们试图控制流量来控制这个问题?
谢谢,确实是它
答案 0 :(得分:0)
但是在你的第二个实现中你必须处理同一个类中的错误情况,我的意思是一个单独的错误处理程序模块是一个更好的方法,分离方面和应用类的单一责任是我认为更好的实现方式
答案 1 :(得分: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);
}
}