使用零长度的数组

时间:2009-06-24 06:17:07

标签: java arrays

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

 new ElementType[0];

我看过这样的构造,但我不明白为什么这可能有用。

3 个答案:

答案 0 :(得分:43)

一个例子。说,你有一个功能

public String[] getFileNames(String criteria) {

获取一些文件名。想象一下,您没有找到满足条件的文件名。你有什么回报?您有2个选择 - 返回null 0大小的数组

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

Effective Java, Item 27

中有一章

答案 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]); 
相关问题