例如,我们可以像这样构建这样的数组:
我见过这样的结构,但我不明白它为什么有用。
new ElementType[0];
我见过这样的结构,但我不明白它为什么有用。
一个例子。例如,你有一个函数:
public String[] getFileNames(String criteria) {
获取一些文件名。想象一下,如果没有找到符合条件的文件名,你会返回什么?你有两种选择 - 要么返回null,要么返回大小为0的数组。
返回大小为0的数组更好,因为调用者不需要检查NULL,并且可以以一致的方式处理数组 - 比如在一个循环中(这种情况下循环将为空)。
关于这个问题,在Effective Java, Item 27中有一章节。
null
的性能更高。另请参见https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained的第三段。 - Pacerier在许多情况下,与null
相比,它更容易使用,因为null
是明显的替代品。
假设您想返回一个包含(例如)一组相关文件名的Iterable<String>
... 但由于某种原因没有这些文件。您可以选择返回null
来指示这一点,但是然后调用者必须特殊处理。相反,如果您返回一个空集合,调用者仍然可以使用增强的for循环:
for (String file : getFiles())
那么为什么要使用空数组而不是空的ArrayList
或类似的数据结构呢?因为数组是一个固定大小的数据结构,所以空数组本质上是不可变的。这意味着您可以保留单个值并将其返回给任何想要的人,知道他们不可能对其进行任何操作。在某些情况下,这非常有用。
它是null的替代品,因为在使用之前不需要检查null。
更正式地说,它是特例设计模式的一个特殊情况(还要检查Null Object)。
另一个惯用的用法是集合 toArray :
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);
String[]
都可以正常工作;它只需要所需转换的类型的实例。 - anon