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.. } }
我已经读到抛出异常非常昂贵。这是否意味着只要有可能不抛出异常,我们就必须避免抛出异常以试图对问题进行流程控制?谢谢,的确是
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);
}
}