代码之家  ›  专栏  ›  技术社区  ›  pierrotlefou

使用array==null或数组长度== 0?

  •  3
  • pierrotlefou  · 技术社区  · 14 年前

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

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

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

    5 回复  |  直到 14 年前
        1
  •  11
  •   jjnguy Julien Chastang    14 年前

    如果你的方法 GetSomeFoos() new Foo[0]

    如果有什么错误,你应该抛出一个 Exception

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

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

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

        2
  •  0
  •   Dead Programmer    14 年前

        3
  •  0
  •   Mike Baranczak    14 年前

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

    缺点是使代码更加冗长。

    private static final String[] EMPTY = {};
    

    或:

    private static final List<String> EMPTY = 
        Collections.unmodifiableList(new ArrayList<String>());
    
        4
  •  0
  •   卢声远 Shengyuan Lu    14 年前

    我更喜欢

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

        5
  •  0
  •   barrowc    14 年前

    Effective Java

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