2011-05-07 24 views
5

1) bunu yapamaz niye merak ediyorum:String ArrayList <String> Casting []

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

Yanlış olan ne var?)

2 (Bunu soru için alakalı değil, ikinci kod satırı görmezden gelebilir) Ben amacım bu kodu kullanarak ulaşılabilir biliyorum:

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

Buna ArrayList dönüştürmenin tercih yolu mu Dizi Dizisi mi? Daha iyi/daha kısa bir yol var mı?

bir nesne dizisidir,

cevap

13

İlk örnek listesi olarak bir Object[] döndürür istediğiniz dizinin ne tür bilmez ve bu sen

ile ikincisi biraz daha kısa yapabilir bir String[]

için döküm edilemez

+1

Yanıtlarınız için hepinize teşekkür ederiz, hepsi yardımcı olur. Bu cevabın ifadesini diğerlerinden daha net buluyorum. Arşiv için küçük bir hatırlatma: Alt sınıftan üst sınıfa kadar ancak diğer yoldan yayın yapamazsınız. Nesne String'in bir üst sınıfı olduğu için, String'den Object'e yayınlayabilirsiniz, ancak diğer yoldan değil. Kullanmıyorsanız, o kadar basit şeyler unutuyorsunuz ;-) –

3

:-) size ArrayList yarattığı destek dizisi değil bir dize dizisi çok teşekkür ederim ve bunu döküm olamaz bu yüzden.

durumda bir diziye dönüştürmek için ortak bir yol var 2. İlişkin

, ama bunun biraz daha az ayrıntılı yazılı tarafından yapabilirsiniz:

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

Girdilerin türü kaybolur (Generikler Java'da silinir). Bu nedenle, toArray çağrısını yaptığınızda, yalnızca Nesne türünü Geri döndürebilir, çünkü Listenin Nesneleri içermesi gerektiğini bilir. Böylece, bir String [] dizginiz ile geri alabilirsiniz. Dizilerin bir dizisine sahip olmak istiyorsanız, bunu toArray yöntemine iletmeniz gerekir. Yayınlama ile Dizi başvurusunu daraltamazsınız, yani bir dizi Dizeyi bir Dizeler dizisine atayamazsınız. Ama onlar, kovaryant oldukları için zıt yolda gidebilirsin.

İlgili konular