2011-05-07 114 views
5

1)我很奇怪,爲什麼我不能做到這一點:鑄造的ArrayList <String>爲String []

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = (String[])entries.toArray(); 

這有什麼錯呢? (你可能會忽略第二個代碼行,這是不相關的問題)

2)我知道我的目標可以使用此代碼來達到:

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = new String[entries.size()]; 
myentries = entries.toArray(myentries) 

這是該ArrayList轉換成的首選方式一個字符串數組?有更好/更短的方式嗎?

非常感謝你:-)

回答

13

第一個例子返回Object[]作爲列表不知道你想要什麼類型的數組,這不能被轉換爲String[]

可以使第二個與

稍短
+1

謝謝大家的回覆,他們都很有幫助。我發現這個答案的措詞比其他答案更清楚一點。對檔案有一點提醒:你可以從子類轉換到超類,但不能反過來。由於Object是String的超類,因此您可以從String轉換爲Object,但不能反過來。這是基本的東西,你忘了它,如果你不使用它;-) – 2011-05-07 16:21:47

3

通過ArrayList中創建的支持數組是不是一個String數組,它是一個對象數組,這就是爲什麼你不能投它。

關於情況2.這是將其轉換爲一個數組的常見方式,但你可以把它少了幾分冗長的文字:

String[] myentries = entries.toArray(new String[entries.size()]); 
2
List<String> list = ...; 
String[] array = list.toArray(new String[list.size()]); 
0

條目類型丟失(因爲泛型在Java中被刪除)。因此,當您執行toArray調用時,它只能返回Object類型,因爲它知道List必須包含Objects。所以你可以用你的字符串取回一個Object []。如果你想有一個字符串數組,那麼你需要將它傳遞給toArray方法。通過強制轉換,不能縮小數組引用的範圍,即不能將對象數組轉換爲字符串數組。但是你可以採用相反的方式,因爲它們是協變的。

相關問題