[英]Returning an empty array
我正在嘗試考慮返回空數組而不是null
的最佳方法。
foo()
和bar()
之間有什么區別嗎?
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
private static File[] bar() {
return new File[0];
}
返回空數組的另一種方法是使用常量,因為給定類型的所有空 arrays 都是相同的。
private static final File[] NO_FILES = {};
private static File[] bar(){
return NO_FILES;
}
foo()
和bar()
都可能在某些 IDE 中生成警告。 例如,IntelliJ IDEA 會生成一個Allocation of zero-length array
警告。
另一種方法是使用 Apache Commons Lang 3 ArrayUtils.toArray()
function 和空 arguments:
public File[] bazz() {
return ArrayUtils.toArray();
}
這種方法對性能和 IDE 都很友好,但需要第三方依賴。 但是,如果您的類路徑中已經有 commons-lang3,您甚至可以將靜態定義的空 arrays 用於原始類型:
public String[] bazz() {
return ArrayUtils.EMPTY_STRING_ARRAY;
}
絕對是第二個。 在第一個中,您使用一個常量空List<?>
,然后將其轉換為File[]
,這需要創建一個空File[0]
數組。 這就是您在第二步中一步完成的操作。
您可以通過以下兩種方式返回空數組:
如果要返回int
數組,則
使用{}
:
int arr[] = {}; return arr;
使用new int[0]
:
int arr[] = new int[0]; return arr;
同樣,您也可以為其他數據類型返回數組。
return new File[0];
這是更好、更有效的方法。
除了 foo 執行 3 個可見的方法調用來返回空數組之外沒有區別,而 bar() 只是創建了這個數組並返回它。
我很確定你應該 go 和bar();
因為用foo();
它創建了一個列表(一無所有),因為您最終還是創建了一個新的 File[0],那么為什么不直接返回 go 呢!
在一行中,您可以執行以下操作:
private static File[] bar(){
return new File[]{};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.