假设我们有一个服务方法getById(Long id)
,它根据其id返回一个实体。如果id为null,那么正确的操作是什么?
抛出IllegalArgumentException?
抛出NullPointerException? (guavas Preconditions.checkNotNull这样做)
返回null?
由于永远不会有id == null的实体,返回null似乎不是那么糟糕?我的意思是如果id不存在,方法将返回null。
前提是很好的单行,但在这种情况下抛出NullPointerException似乎极端。
这里的“最佳实践”是什么?
答案 0 :(得分:2)
将null传递给这样的方法表明存在错误。没有人会想要找到具有空ID的实体,因为不存在这样的事物。所以这可能意味着UI层中存在绑定问题,或者调用者忘记在其表单中添加隐藏的ID字段,或者其他任何内容。
返回null会隐藏错误,或使其更加模糊。抛出异常可以及早发现错误,并提供明确的错误消息,允许及早修复它,并使应用程序更加稳健。
null为null的非可空参数的约定是抛出NullPointerException。那就是我要做的。
答案 1 :(得分:1)
id
null
没有记录,因此如果给出没有记录的“有效”id
,该方法应该做任何事情。这是最不惊讶的原则。消费者将根据未找到的情况进行编码,因此应将其覆盖。
有一件事,新纪录的id
是什么还没有被保留?如果恰好是null
答案 2 :(得分:0)
始终最好使用NullPointerException
,因为在实体集合中ID没有找到任何内容。