返回一个空数组
题
这可能是个愚蠢的问题,但是foo()
和bar()
之间有什么区别吗?
码
private static File[] foo() { return Collections.emptyList().toArray(new File[0]); }
private static File[] bar() { return new File[0]; }
我试图想到返回一个空数组,而不是null
的最佳方式。
返回空数组的另一种方法是使用常量,因为给定types的所有空数组都是相同的。
private static final File[] NO_FILES = {}; private static File[] bar(){ return NO_FILES; }
在某些IDE中, foo()
和bar()
可能会产生警告。 例如,IntelliJ IDEA将生成一个Allocation of zero-length array
警告的Allocation of zero-length array
。
另一种方法是使用带有空参数的Apache Commons Lang 3 ArrayUtils.toArray()
函数:
public File[] bazz() { return ArrayUtils.toArray(); }
这种方法兼顾性能和IDE,但需要第三方依赖。 但是,如果您的类path中已经有commons-lang3,则甚至可以使用静态定义的空数组作为基本types:
public String[] bazz() { return ArrayUtils.EMPTY_STRING_ARRAY; }
绝对是第二个。 在第一个中,您使用一个常量空的List<?>
,然后将其转换为File[]
,这需要创build一个空的File[0]
数组。 这就是你在第二个单一步骤中所做的。
除了foo执行3个可见的方法调用来返回空数组,而bar()只是创build这个数组并返回它之外,没有任何区别。
我很确定你应该去吧bar();
因为用foo();
它会创build一个List(无所谓),因为您最终创build了一个新的File [0],所以为什么不直接返回呢!