这可能是一个愚蠢的问题,但foo()
和bar()
之间是否存在差异?
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
private static File[] bar() {
return new File[0];
}
我正在尝试考虑返回空数组的最佳方法,而不是null
。
答案 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
的数组,那么
使用{}
:
int arr[] = {};
return arr;
使用new int[0]
:
int arr[] = new int[0];
return arr;
同样,您也可以为其他数据类型返回数组。
答案 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];
这是一种更好,更有效的方法。