2011-09-02 9 views
8

tanımlanmış List<Integer> stack = new ArrayList<Integer>(); Java sınıfının toArray sınıfını listeleme - Neden "Tamsayı" listesini "Tamsayı" dizisine dönüştüremiyorum?

Şu şekilde bir diziye dönüştürmeyi denediğimde:

Integer[] array= stack.toArray(); 

Bu özel durumu alıyorum:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[]. 

Neden? Tam olarak aynı tiptir - Tamsayı Tamsayı. Bu genel durumda, sınıflar father-and-son relation

olduğunda, döküm yapmayı denedim:

 Integer[] array= (Integer[]) stack.toArray(); 

Ancak şu hatayı alıyorum:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

Sorun nedir?

cevap

11

Tür silme işleminden dolayı ArrayList, çalışma zamanında genel türünü bilmez, bu nedenle yalnızca size en genel Nesneyi [] verebilir. İstediğiniz dizinin türünü belirtmenize olanak veren the other toArray method'u kullanmanız gerekir.

Integer[] array= stack.toArray(new Integer[stack.size()]); 
1

yerine bunu yapın:

Integer[] array = stack.toArray(new Integer[stack.size()]); 

Biz toArray yöntemine argüman olarak "tohum" dizisi geçmesi gerekiyor.

2

bunu yapmanın yolu şudur:

Kayıt için
Integer[] array = stack.toArray(new Integer[stack.size()]); 

, kodunuz derleme değil sebebi sadece tip silme değildir. Sorun, List<T>.toArray()'un Object[] değerini döndürmesidir ve bunu, jenerikler kullanıma sunulmadan önce yapmıştı.