例如,我们可以像这样构造一个这样的数组:
new ElementType[0];
我看过这样的构造,但我不明白为什么这可能有用。
答案 0 :(得分:43)
一个例子。说,你有一个功能
public String[] getFileNames(String criteria) {
获取一些文件名。想象一下,您没有找到满足条件的文件名。你有什么回报?您有2个选择 - 返回null 或 0大小的数组。
0大小的数组的变体更好,因为您的调用者不需要检查 NULL 并且可以以一致的方式处理数组 - 比如说在一个循环中(在这种情况下将是空的)。
中有一章答案 1 :(得分:15)
在许多情况下使用null
比使用null
更明显是替代方案。
假设您要返回包含(比方说)相关文件名列表的Iterable<String>
...但由于某种原因没有任何内容。你可以返回null
来表示,但是调用者必须特殊情况。相反,如果返回一个空集合,调用者仍然可以使用增强的for循环:
for (String file : getFiles())
那么为什么要使用空数组而不是空ArrayList
或类似的?数组是固定大小的,因此空数组实际上是不可变的。这意味着您可以保留单个值并将其返回给您喜欢的任何人,因为他们知道他们不可能对此做任何事情。在某些情况下,这可能非常有用。
答案 2 :(得分:4)
它是null的替代,因为在使用它之前不需要检查null。 更正式地说,它是special case design pattern的一个特例(也检查Null对象)。
另一个习惯用法是集合 toArray :
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);