簡體   English   中英

返回一個空數組

[英]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數組,則

  1. 使用{}

     int arr[] = {}; return arr;
  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM