2011-09-05 20 views
5

Gdyby to była regularna tablica, mógłbym po prostu utworzyć nową tablicę, a następnie wykonać arraycopy, ale generics nie pozwoli mi tego zrobić. Najlepszą rzeczą, jaką wymyślić tak daleko jest:Zmiana rozmiaru tablicy

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

To kompiluje, ale w czasie wykonywania otrzymuję wyjątku null pointer. Czy ktoś może wyjaśnić, co robię źle?

+2

Dlaczego 'java.util.ArrayList' nie działa dla Ciebie? Radzi sobie z tym wszystkim i nie tylko, nie trzeba wymyślać koła. – corsiKa

+0

Jeśli zmieniasz rozmiar tablic, prawdopodobnie potrzebujesz ogólnej tablicy ArrayList. – Cheeso

+0

Jestem zaznajomiony z tablice i ArrayLists, ale po prostu staram się dowiedzieć o generycznych. Dzięki za sugestię (w praktyce prawdopodobnie skorzystam z ArrayList). – MatthewK

Odpowiedz

6

można użyć Arrays.copyOf(myArray,myArray.length*3) aby kopia

moje przypuszczenie że myArray[0] jest null tak myArray[0].getClass() rzuca NullPointer

jeśli trzeba typ wykonania komponentów można użyć myArray.getClass().getComponentType()

0

Two rzeczy:

  1. Jeśli otrzymujesz punkt zerowy r w pierwszym wierszu resize() jest prawdopodobnie dlatego, że nie masz wartości w myArray[0]. Jeśli jest to wartość pusta, Twoja maszyna zostanie zbombardowana.

  2. Nie wydaje się, że przypisujesz myArray = tempArray, więc prawdopodobnie wkrótce napotkasz na ArrayIndexOutOfBounds.

+0

To było to, próbowałem ręcznie dodając pewne rzeczy do tablicy i to naprawiło, więc problem jest gdzie indziej. I dobry chwyt na # 2, przepraszam, że zapomniałem wkleić to pytanie. – MatthewK