把没有奶酪可买的情况当做是一种特例,这是不合常理的。这样做会要求客户端必须有额外的代码来处理null返回值。
而不是
对于一个返回null
而不是零长度数组或者集合的方法,几乎每次用到该方法时都需要这种曲折的处理方式。这样做很容易出错,因为编写客户端程序的程序员可能会忘记写这种专门的代码来处理null返回值。
返回null
而不是零长度的数组也会使返回数组或集合的方法本身变得更加复杂。
性能不是问题(分配数组或集合)
在这个级别上担心性能问题是不明智的,除非分析表明这个方法正是造成性能问题的真正源头。
对于不返回任何元素的调用,每次都返回同一个零长度数组是有可能的,因为零长度数组是不可变的,而不可变对象有可能被自由地共享。
零长度数组常量被传递给toArray
方法,指明所期望的返回类型。
正常情况下,toArray
方法分配了返回的数组,但是,如果集合为空,它将使用零长度的输入数组,Collection.toArray(T[])
的规范:如果输入数组大到足够容纳这个集合,它将返回这个输入数组。因此,这种做法永远不会分配零长度的数组。
集合类的方法都可以做成在需要返回空集合时都返回一个不可变的空集合。
总结
返回类型为数组或集合的方法没理由返回null,而不是返回一个零长度的数组或者集合。