2011-09-05 42 views
5

Eğer bu düzenli bir dizi olsaydı, yeni bir dizi oluşturabilirim ve ardından arraycopy yapabilirdim, ancak jenerikler bunu yapmama izin vermiyor.Bir Diziyi Yeniden Boyutlandırma

public void resize() { 
    T[] tempArray = Arrays.copyOf(myArray,myArray.length*3); 
} 

Bu derler ama çalışma zamanında, bir boş gösterici istisna olsun: Ben şimdiye kadar ile geldim iyi şey. Herkes yanlış yaptığımı açıklayabilir mi?

+2

Herhangi bir nedenle "java.util.ArrayList" sizin için çalışmıyor mu? Bütün bunları ve daha fazlasını idare eder, tekerleği yeniden icat etmeye gerek yoktur. – corsiKa

+0

Dizileri yeniden boyutlandırıyorsanız, muhtemelen genel bir ArrayList olmasını istersiniz. – Cheeso

+0

Arrays and ArrayLists'e aşinayım, ama sadece jenerikler hakkında bilgi almaya çalışıyorum. Öneri için teşekkürler (Uygulamada, ArrayList muhtemelen kullanacağım şeydir). – MatthewK

cevap

6

kopyalamak yapmak için Arrays.copyOf(myArray,myArray.length*3) kullanabilirsiniz

benim tahminim myArray[0] boş olmasıdır böylece myArray[0].getClass() Eğer bileşenlerin çalışma zamanı türü gerekiyorsa kullanabileceğiniz

nullpointer atar myArray.getClass().getComponentType()

0

İki şeyler:

  1. Eğer boş bir pointe alıyorsanız resize()'un ilk satırında r, muhtemelen myArray[0]'da hiçbir değeriniz olmadığından. Bu boşsa, getClass()’unuz bombalanır.

  2. myArray = tempArray'u atamak için görünmüyorsanız, büyük olasılıkla bir ArrayIndexOutOfBounds ürününe hemen gireceksiniz.

+0

Bu, diziye bazı öğeleri el ile eklemeyi denedim ve düzeltdim, bu yüzden sorun başka bir yer. Ve # 2'de iyi yakaladığım için üzgünüm, soruya yapıştırmayı unuttum. – MatthewK

İlgili konular