返回一个空数组

这可能是个愚蠢的问题,但是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],所以为什么不直接返回呢!