2010-03-22 15 views
1

嗨,是否有一個標準的位置來訪問JDK> 1.5中的空數組常量。JDK中的空字符串數組的標準位置

當我想要做的,從一個字符串集合(如ArrayList中)轉換到一個字符串數組,我發現自己用自己的 這是在我自己的常量類中定義:

public static final String[] EMPTY_STRING_ARRAY = new String[0]; 

然後在我的客戶端代碼是這樣的:

String[] retVal = myStringList.toArray(Constants.EMPTY_STRING_ARRAY); 
return retVal; 

我想知道,如果這是在做它,如果我想的東西 我從簡單的搜索我認爲這種事情是印象中的「習慣」的方式流行很多人的代碼。

任何想法,答案,評論(除了我真的不應該使用字符串數組)大爲讚賞,

乾杯 西蒙

回答

1

有像在JDK的任何地方沒有數組的定義。在JDK做的只有兩個標準的方式是你列出或

String ret[] = new String[myStringList.size()]; 
myStringList.toArray(ret); 
return ret; 
2

我建議以下改進代碼:

String[] retval = myStringList.toArray(new String[myStringList.size()]); 

這樣,指定者方法使用所提供的,適當的大小的數組作爲容器,而不是在幕後創建一個新的數組。 ArrayList javadoc:

如果列表符合指定的 數組,它將返回其中。 否則,將使用指定的 數組的運行時類型和此列表的大小將新陣列分配爲 。

+0

我同意你的回答,但會指出在創建數組的地方是學術的,因爲代碼中的示例使用共享對象。因此,調用不會生成額外的對象(與調用... = list.toArray(new String [0])相反,我認爲這是無效的)。 – 2010-03-22 15:22:30

+0

嗯,你說得對。感謝您指出! – 2010-03-22 15:26:57

+0

感謝您的回覆。 我有點困惑,爲什麼這是一個改進。 所以你在說,最好是在我的代碼中明確寫出一些模擬ArrayList中「幕後」事件的東西,而不僅僅是讓它在幕後發生,有可能在將來的JDK版本中它可能以某種方式(不要問我如何)進行優化? 是因爲我直接分配一個新數組而不是讓ArrayList通過某種反射機制創建一個(這在現代jvms中效率稍高)? 乾杯 Simon – 2010-03-22 15:34:00