返回一个空数组

Moo*_*eam 48 java arrays

这可能是一个愚蠢的问题,但是foo()和之间有什么区别bar()吗?


private static File[] foo() {
    return Collections.emptyList().toArray(new File[0]);
}
Run Code Online (Sandbox Code Playgroud)
private static File[] bar() {
    return new File[0];
}
Run Code Online (Sandbox Code Playgroud)

我试图想出返回空数组的最佳方法,而不是null.

Pet*_*rey 76

返回空数组的另一种方法是使用常量,因为给定类型的所有空数组都是相同的.

private static final File[] NO_FILES = {};
private static File[] bar(){
    return NO_FILES;
}
Run Code Online (Sandbox Code Playgroud)

  • @Moonbeam,它仍然认为foo()的功能超出了它的需要,这可能会导致对它正在做的事情产生混淆.通常的情况是,人们可以假设a)额外被放在那里是有原因的,并且需要时间来找到不存在的东西,b)它正在做更多的工作而不是它需要,即使它没有) (2认同)

wee*_*ens 32

双方foo()bar()可能产生一些IDE的警告.例如,IntelliJ IDEA将生成Allocation of zero-length array警告.

另一种方法是使用ArrayUtils.toArray()带有空参数的Apache Commons Lang 3 函数:

public File[] bazz() {
    return ArrayUtils.toArray();
}
Run Code Online (Sandbox Code Playgroud)

这种方法既性能又适合IDE,但需要第三方依赖.但是,如果你的类路径中已经有commons-lang3,你甚至可以使用静态定义的空数组来表示原始类型:

public String[] bazz() {
    return ArrayUtils.EMPTY_STRING_ARRAY;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*aux 18

绝对是第二个.在第一个中,使用常量为空List<?>,然后将其转换为a File[],这需要创建一个空File[0]数组.这就是你在第二步中所做的一步.

  • +1:第一个令人困惑.但它没有创建列表.emptyList()返回一个常量. (6认同)

MAH*_*HAN 5

您可以通过以下两种方式返回空数组:

如果要返回的数组int

  1. 使用{}

    int arr[] = {};
    return arr;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用new int[0]

    int arr[] = new int[0];
    return arr;
    
    Run Code Online (Sandbox Code Playgroud)

同样,您也可以为其他数据类型返回数组。


小智 5

return new File[0];
Run Code Online (Sandbox Code Playgroud)

这是更好、更有效的方法。