假设我们有一个服务方法getById(Long id)
,它根据实体的id返回一个实体。在id为空的情况下,正确的操作是什么?
扔IllegalArgumentException吗?
抛出NullPointerException吗?(番石榴先决条件。checkNotNull做这个)
返回null吗?
既然永远不可能有一个id == null的实体,返回null似乎没有那么糟糕?我的意思是,如果id不存在,该方法无论如何都会返回null。
先决条件是很好的一行代码,但是在这种情况下抛出NullPointerException似乎有些极端。
这里的"最佳实践"是什么?将null传递给这样的方法表明存在错误。没有人会想要找到具有空ID的实体,因为这样的东西不可能存在。所以这可能意味着在UI层存在绑定问题,或者调用者忘记在表单中添加隐藏的ID字段,或者其他什么。
返回null隐藏了错误,或者使它更加模糊。抛出异常可以及早发现错误,并提供清晰的错误信息,从而尽早修复错误,最终使应用程序更加健壮。
对于为空的非空参数的约定是抛出NullPointerException。我也会这么做的
没有null
的id
记录,因此如果给定没有记录的"有效"id
,该方法应该做任何事情。这就是最小意外原则。消费者将对未找到的情况进行编码,因此它们应该被覆盖。
有一件事,没有被持久化的新记录的id
是多少?这可能会导致你偏离你的行为,如果它恰好是null
最好使用NullPointerException
,因为在实体集合中没有找到ID中的值