零长度数组的使用

28
例如,我们可以像这样构建这样的数组:
 new ElementType[0];

我见过这样的结构,但我不明白它为什么有用。

请编辑您的问题以澄清。 - Nippysaurus
3个回答

46

一个例子。例如,你有一个函数:

public String[] getFileNames(String criteria) {

获取一些文件名。想象一下,如果没有找到符合条件的文件名,你会返回什么?你有两种选择 - 要么返回null要么返回大小为0的数组

返回大小为0的数组更好,因为调用者不需要检查NULL,并且可以以一致的方式处理数组 - 比如在一个循环中(这种情况下循环将为空)。

关于这个问题,在Effective Java, Item 27中有一章节。


确保:如果代码旨在在“较低层”上使用,则null的性能更高。另请参见https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained的第三段。 - Pacerier

15

在许多情况下,与null相比,它更容易使用,因为null是明显的替代品。

假设您想返回一个包含(例如)一组相关文件名的Iterable<String> ... 但由于某种原因没有这些文件。您可以选择返回null来指示这一点,但是然后调用者必须特殊处理。相反,如果您返回一个空集合,调用者仍然可以使用增强的for循环:

for (String file : getFiles())

那么为什么要使用空数组而不是空的ArrayList或类似的数据结构呢?因为数组是一个固定大小的数据结构,所以空数组本质上是不可变的。这意味着您可以保留单个值并将其返回给任何想要的人,知道他们不可能对其进行任何操作。在某些情况下,这非常有用。


4

它是null的替代品,因为在使用之前不需要检查null。

更正式地说,它是特例设计模式的一个特殊情况(还要检查Null Object)。

另一个惯用的用法是集合 toArray

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

请注意,在第二种情况下,任何 String[] 都可以正常工作;它只需要所需转换的类型的实例。 - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接