什么都不返回,使用array == null或array.length == 0?

时间:2010-09-28 03:08:31

标签: java null empty-list

假设我有一个带有以下签名的函数:

Foo[] getSomeFoos() 
{
      //return null         --- option A 
      or 
      //return new Foo[0];  --- option B
}

建议的做法是返回表示没有返回元素的值?每个选项的优缺点是什么?

5 个答案:

答案 0 :(得分:11)

如果您的方法GetSomeFoos()实际上'找到'0个元素,那么它应该返回new Foo[0]

如果出现某种错误,您应该抛出Exception

原因是因为用户不必查找空值:

for (Foo f: GetSomeFoos()) {
    // do stuff
}

在上述情况下,如果GetSomeFoos返回null,则用户必须处理NullPointerException。但是,如果返回一个空数组,代码将永远不会进入循环,用户将不必处理异常。

答案 1 :(得分:0)

是否完全返回null或空对象取决于方法用法。如果客户端调用此方法并将其作为API公开,那么抛出异常会更好,但如果它在ur包中使用并且从未被客户端使用,那么返回null就可以了。

答案 2 :(得分:0)

返回null更有效,因为您可以避免创建新数组或集合对象的开销。确实,您必须在使用函数输出的位置添加空检查,但是它的开销(使用Java和几乎所有语言)可以忽略不计。我还认为检查null是一个很好的习惯,尤其是在处理第三方库时。

缺点是你使代码更加冗长。

如果确实返回空数组,则可以通过重新使用同一对象来降低性能。创建一个不可变常量,并返回:

private static final String[] EMPTY = {};

或者:

private static final List<String> EMPTY = 
    Collections.unmodifiableList(new ArrayList<String>());

答案 3 :(得分:0)

我更喜欢零大小的数组

它更安全(避免NPE)并且更容易(不需要空检查)。

答案 4 :(得分:0)

Effective Java(第2版) - 第43项:返回空数组或集合,而不是空值

总之,没有理由从数组或集合值方法返回null而不是返回空数组或集合