首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用长度为零的数组

使用长度为零的数组
EN

Stack Overflow用户
提问于 2009-06-24 06:17:07
回答 3查看 8.6K关注 0票数 28

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

代码语言:javascript
复制
 new ElementType[0];

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-24 06:29:38

举个例子。比如说,你有一个函数

代码语言:javascript
复制
public String[] getFileNames(String criteria) {

来获取一些文件名。假设您找不到任何满足条件的文件名。你会返回什么?您有两个选择-返回null或0大小的数组。

具有0大小数组的变体更好,因为您的调用者不需要检查NULL,并且可以以一致的方式处理数组-例如,在循环中(在本例中为空)。

Effective Java, Item 27上有一个关于这方面的章节

票数 46
EN

Stack Overflow用户

发布于 2009-06-24 06:28:28

在许多情况下,它比null更容易使用,而null是显而易见的替代方案。

假设您想返回一个包含(比方说)相关文件名列表的Iterable<String> ...但由于某种原因,没有任何一个。你可以返回null来指明这一点,但是调用者必须在特殊情况下这样做。相反,如果返回一个空集合,调用方仍然可以使用增强的for循环:

代码语言:javascript
复制
for (String file : getFiles())

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

票数 15
EN

Stack Overflow用户

发布于 2009-06-24 07:06:48

它是null的替代品,因为您在使用它之前不需要检查null。更正式地说,它是special case design pattern的一个特例(也可以检查空对象)。

另一个惯用的用法是collections toArray

代码语言:javascript
复制
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]); 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1036666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档