返回一个空数组

时间:2011-07-21 18:10:00

标签: java arrays

问题

这可能是一个愚蠢的问题,但foo()bar()之间是否存在差异?


CODE

private static File[] foo() {
    return Collections.emptyList().toArray(new File[0]);
}

private static File[] bar() {
    return new File[0];
}

我正在尝试考虑返回空数组的最佳方法,而不是null

8 个答案:

答案 0 :(得分:73)

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

private static final File[] NO_FILES = {};
private static File[] bar(){
    return NO_FILES;
}

答案 1 :(得分:30)

foo()bar()都可能在某些IDE中生成警告。例如,IntelliJ IDEA将生成Allocation of zero-length array警告。

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

public File[] bazz() {
    return ArrayUtils.toArray();
}

这种方法兼具性能和IDE友好性,但需要第三方依赖。但是,如果你的类路径中已经有commons-lang3,你甚至可以使用静态定义的空数组作为基本类型:

public String[] bazz() {
    return ArrayUtils.EMPTY_STRING_ARRAY;
}

答案 2 :(得分:18)

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

答案 3 :(得分:5)

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

如果你想返回int的数组,那么

  1. 使用{}

    int arr[] = {};
    return arr;
    
  2. 使用new int[0]

    int arr[] = new int[0];
    return arr;
    
  3. 同样,您也可以为其他数据类型返回数组。

答案 4 :(得分:3)

除了foo执行3个可见方法调用以返回无论如何创建的空数组这一事实没有区别,而bar()只创建此数组并返回它。

答案 5 :(得分:3)

我很确定你应该选择bar(); 因为使用foo();它会创建一个List(无所事事),因为你最后还是创建了一个新的File [0],所以为什么不直接返回呢!

答案 6 :(得分:0)

您可以单行执行:

private static File[] bar(){
    return new File[]{};
}

答案 7 :(得分:0)

return new File[0];

这是一种更好,更有效的方法。