【发布时间】:2019-04-14 01:26:01
【问题描述】:
当函数或方法遇到错误/无效数据时,是否返回 false 或抛出异常? 考虑一个类 Loginer 有这样的方法:
public boolean login(String username){
//retrieve data...
if(username.equals(record.username)){
return true;
}
return false;
}
然后在主类或其他类
String username = "ggwp";
if(Loginer.login(username)){
//successful login, show homepage...
new User(username);
} else {
//invalid username
}
这会不会是低效的,因为它已经用 if-else 语句检查了两次,一次在 Loginer 中,另一次在 main 中再次检查 true。 不会 try catch 会做同样的事情吗?让登录器抛出异常:
public User login(String username){
//retrieve record data...
if(username.equals(record.username)){
return new User(username);
}
/* Exception if no record found for such username */
throw new MyException("invalid username");
}
然后在主要的:
String username = "ggwp2";
User theUser;
try{
//sucessful login
theUser = Loginer.login(username);
}catch(MyException e){
//invalid username
}
try-catch 不需要第二次检查真假。 (这个例子我使用返回 User 对象,它可能是 void 并且什么都不返回,但重点是,为什么使用 boolean 最终会被检查两次?)
一些网站消息来源说不要使用 try-catch 进行“代码跳转”,但在这种情况下,它只是做同样的事情。 (try-catch 和 if-else 语句太相似了)
那么哪个是正确的,为什么?如果这个问题不正确,请指导并抱歉,我是OO的新手。
【问题讨论】:
-
仅使用异常来处理异常情况。如果可以预测和检测到问题,则无需使用异常。
-
有返回
Optional<User>的选项,只有有效时才填写,否则为空。 -
是否反对将其作为stackoverflow.com/questions/2972307/… 的副本关闭?