使用零长度的数组

例如,我们可以像这样构造这样一个数组:

new ElementType[0]; 

我看到了这样的结构,但我不明白为什么这可能是有用的。

一个例子。 说,你有一个function

 public String[] getFileNames(String criteria) { 

得到一些文件名。 想象一下,你没有find任何符合标准的文件名。 你回来了什么? 您有2个select – 返回null0大小的数组

具有0大小的数组的变体是更好的,因为你的调用者不需要检查NULL,并且可以以一致的方式处理数组 – 例如在循环(在这种情况下将是空的)中。

有效的Java,第27项有一章

在许多情况下,使用null比使用null更容易,其中null是明显的select。

假设你想返回一个包含(比如说)相关文件名列表的Iterable<String> …但是由于某种原因没有任何东西。 你可以返回null来表示,但是那么调用者必须特别说明这一点。 相反,如果你返回一个空的集合,调用者仍然可以使用增强的for循环:

 for (String file : getFiles()) 

那么为什么使用空数组而不是空ArrayList或类似的东西呢? 数组是固定的大小,所以一个空数组是有效的不变的。 这意味着你可以保留一个单一的价值,并将其返还给任何你喜欢的人,知道他们不可能用它做任何事情。 在某些情况下这可能非常有用。

它是null的替代品,因为在使用它之前不需要检查null。 更正式地说,它是特殊情况devise模式的一个特殊情况(也检查Null对象)。

另一个习惯用法是收集toArray

 List<String> list = new ... ; // fill the list String[] array = list.toArray(new String[0]);