2010-08-30 100 views
45

当没有行时,query.list()和criteria.list()都返回空列表而不是空值。 背后的原因是什么?hibernate query.list()方法返回空列表而不是空值

+0

你为什么要null?我明白,当你查询单个结果 - 没有发现将有意义返回null。但是list()应该总是返回一个空列表!空列表的含义是什么? – ACV 2017-09-14 11:50:55

回答

86

原因是不强制在客户端代码中进行空值检查,与Effective Java 2nd Edition项一致:项目43:返回空数组或集合,而不是空值

这使得客户端代码更简单,并且更少出错(最有可能的方法实现也是这样)。

空回成语很可能从C编程语言中的保持,在 其中阵列长度被从实际阵列单独返回。在C中,如果返回零作为长度,则不存在分配数组的优点。

+0

嗯......但即使它阻止空检查,我们仍然需要检查列表的大小......对吧? 也是一种很好的做法,我们也总是检查null(至少在我们的团队中)。 – Reddy 2010-08-30 10:20:01

+12

这就是要点 - 如果你确定(基于API的承诺),值不能为空,那么你不检查null。不,你不需要检查尺寸。当你迭代集合时,它会跳过迭代。 – Bozho 2010-08-30 11:20:54

+0

好吧......知道了。如果它是空的,并且如果我没有检查它,那么NPE会让我的应用程序崩溃。但如果它是一个空集合,它会跳过逻辑并继续(因为我们通常会检查大小)。感谢Peter和Bozho。 – Reddy 2010-08-30 12:16:09

10

它是一致的:一个列表返回所有结果,不管有没有。