在Java中编码“异常驱动开发”的性能成本?
在 Java 中创建、引发和捕获异常是否会产生任何性能成本?
我正计划将“异常驱动开发”添加到一个更大的项目中。我想设计自己的异常,并将它们包含在我的方法中,迫使开发人员捕获并执行适当的工作。
例如,如果您有一个基于名称从数据库中获取用户的方法。
public User getUser(String name);
但是,用户可能为 null,并且在使用用户的公共方法之前通常会忘记检查这一点。
User user = getUser("adam");
int age = user.getAge();
这将导致 NullPointerException 和崩溃。但是,如果我在返回用户对象之前进行了检查,如果它为空并抛出“UserIsNullException”:
public User getUser(String name) throws UserIsNullException;
我强迫实现者思考和行动:
try {
User user = getUser("adam");
int age = user.getAge();
}catch( UserIsNullException e) {
}
它使代码在意外崩溃时更加安全,并消除了更多错误。假设该网站每小时有数百名访问者,这种设计模式几乎无处不在。
这种设计方法将如何影响性能?这些好处是否超过了成本,或者只是糟糕的编码?
感谢您的任何帮助!
更新!需要明确的是,我的注意力不是像我的例子所暗示的那样包装NullPointerException。目标是迫使实现者编写一个 try/catch,从而避免真正崩溃的头疼,因为:
用户 == 空
被遗忘了。问题涉及比较这两种设计模型:
int age;
try {
User user = getUser("adam");
age = user.getAge();
}catch( UserIsNullException e) {
age = 0;
}
对:
int age;
User user = getUser("adam");
if( user != null ) {
age = user.getAge();
} else {
age = 0;
}