我正在检查涉及数据库事务的服务的null值,如此
if(!id.matches("-?\\d+(\\.\\d+)?") || contactService.getContact(id) == null){
throw new ResourceNotFoundException();
}
Contact contact = contactService.getContact(id);
但是通过这种方式我调用了两次getContact服务并且它是应用程序的开销,任何更好的方法来检查null值,所以我只需要调用我的服务一次。
答案 0 :(得分:4)
执行if
两次
if(!id.matches("-?\\d+(\\.\\d+)?")){
throw new ResourceNotFoundException();
}
Contact contact = contactService.getContact(id);
if(contact == null){
throw new ResourceNotFoundException();
}
答案 1 :(得分:4)
Contact contact;
if(!id.matches("-?\\d+(\\.\\d+)?") || (contact = contactService.getContact(id)) == null){
throw new ResourceNotFoundException();
}
但是,优选地,如果ID与批准的格式不匹配,则应该抛出IllegalArgumentException
(因为这与没有有效ID的条目的情况不同),并且您应该使用{{1将该模式保存为常量字段而不是(1)在每次调用时重新编译它,以及(2)将其隐藏在你的颂歌深处的魔法常量中。
答案 2 :(得分:1)
怎么样?
Contact contact = contactService.getContact(id);
if(!id.matches("-?\\d+(\\.\\d+)?") || contact == null){
throw new ResourceNotFoundException();
}