這可能是一個愚蠢的問題,但有foo()
和bar()
之間的任何差異?返回一個空數組
CODE
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
private static File[] bar() {
return new File[0];
}
我試圖想返回一個空數組,而不是null
的最佳途徑。
這可能是一個愚蠢的問題,但有foo()
和bar()
之間的任何差異?返回一個空數組
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
private static File[] bar() {
return new File[0];
}
我試圖想返回一個空數組,而不是null
的最佳途徑。
返回空數組的另一種方法是使用常量,因爲給定類型的所有空數組都是相同的。
private static final File[] NO_FILES = {};
private static File[] bar(){
return NO_FILES;
}
是的,這是我看到完成的另一種方式。我認爲'foo()'讓我感到迷惑了一下。而且我不確定提及常數是否會有任何好處。我不知道,只是我的經驗不足,我想。 – Moonbeam
+1:由於空數組是不可變的,所以這是最好的解決方案。 –
@Moonbeam,從性能的角度來看,這意味着你不需要每次創建一個對象。 –
絕對是第二個。在第一個中,您使用一個常量爲空的List<?>
,然後將其轉換爲File[]
,這需要創建一個空的File[0]
陣列。這就是你在第二步中所做的一步。
+1:第一個令人困惑。但它不會創建一個列表。 emptyList()返回一個常量。 –
@彼得:謝謝,我不知道。我編輯了我的答案。我會給你+1。 –
除了foo執行3個可見的方法調用以返回空數組,而bar()只是創建該數組並返回它時,創建的數組完全沒有區別。
我敢肯定,你應該去bar();
因爲foo();
它創建一個List(白白),因爲你在創建末尾的新文件[0]無論如何,所以爲什麼不直接返回它去吧!
兩個foo()
和bar()
可能會產生一些IDE的警告。例如,IntelliJ IDEA將生成一個Allocation of zero-length array
警告。
另一種方法是使用Apache Commons Lang中3 ArrayUtils.toArray()
函數與空參數:
public File[] bazz() {
return ArrayUtils.toArray();
}
這種做法是性能和IDE友好的,但需要一個第三方的依賴。但是,如果你已經有公地lang3在類路徑中,你甚至可以使用靜態定義的空數組基本類型:
public String[] bazz() {
return ArrayUtils.EMPTY_STRING_ARRAY;
}
'FOO()只建議'隱藏什麼代碼正在做什麼。 –
@Carlos,我承認這很複雜,但這兩種方法基本上是等價的,對嗎? – Moonbeam
等效如果你忽略可讀性......你幾乎可以把所有東西都複雜化。什麼是最好的方式返回零? '返回15 - 3 * 5 + 0;'? –