0

假设我们有一个服务方法getById(Long id),它根据它的 id 返回一个实体。如果 id 为空,正确的操作是什么?

抛出 IllegalArgumentException?

抛出 NullPointerException?(番石榴 Preconditions.checkNotNull 这样做)

返回空?

既然永远不可能有 id == null 的实体,那么返回 null 似乎不是那么糟糕?我的意思是如果 id 不存在,该方法无论如何都会返回 null 。

先决条件是很好的单行代码,但在这种情况下抛出 NullPointerException 似乎很极端。

这里的“最佳实践”是什么?

4

3 回答 3

2

将 null 传递给此类方法表示存在错误。没有人会想要找到具有空 ID 的实体,因为这样的东西不可能存在。所以这可能意味着在 UI 层中存在绑定问题,或者调用者忘记在其表单中添加隐藏的 ID 字段,或者其他什么。

返回 null 会隐藏错误,或者使其更加模糊。抛出异常及早发现错误,并带有明确的错误消息,允许及早修复它,并使应用程序更加健壮。

为 null 的不可为 null 参数的约定是抛出 NullPointerException。这就是我要做的。

于 2013-03-16T09:09:28.743 回答
1

没有记录id,因此如果给定一个没有记录null的“有效”,该方法应该做任何事情。id这就是最小意外原则。消费者将针对未找到的情况进行编码,因此应将其覆盖。

有一件事,id一个还没有被持久化的新记录是什么?这可能会导致你偏离你的行为,如果它碰巧是null

于 2013-03-16T09:08:31.240 回答
0

总是最好使用NullPointerException,因为在实体集合中没有找到 ID 中的值。

于 2013-03-16T09:02:32.423 回答