2011-09-05 7 views
5

일반 배열 인 경우 새 배열을 만든 다음 arraycopy를 수행 할 수는 있지만 generics는이를 허용하지 않습니다.배열 크기 조정

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

그것은 컴파일하지만 실행 시간에, 나는 널 포인터 예외를 얻을 : 내가 지금까지 함께 왔어요의 가장 좋은 점이다. 아무도 내가 뭘 잘못 설명 할 수 있습니까?

+2

'java.util.ArrayList'가 작동하지 않는 이유는 무엇입니까? 이 모든 것들을 처리 할 수 ​​있기 때문에 바퀴를 재발 명할 필요가 없습니다. – corsiKa

+0

배열의 크기를 조정하는 경우 일반 ArrayList가 필요할 수 있습니다. – Cheeso

+0

Array 및 ArrayLists에 익숙하지만 일반적으로 제네릭을 배우려고합니다. 제안 주셔서 감사합니다 (실제로, ArrayList 아마 내가 사용하는 것입니다). – MatthewK

답변

6

당신이 사본을 만들 Arrays.copyOf(myArray,myArray.length*3)을 사용할 수 있습니다

내 생각 myArray[0]가 null이다 그래서 myArray[0].getClass() 당신이 구성 요소의 실행시의 형태를 필요로하는 경우 사용할 수있는

nullpointer에게 던졌습니다 myArray.getClass().getComponentType()

0

두 사물 :

  1. null pointe r은 resize()의 첫 줄에있는 것이므로 myArray[0]에 값이 없기 때문일 수 있습니다. null 인 경우 getClass()이 폭파합니다.

  2. myArray = tempArray을 할당하는 것으로 보이지 않으므로 곧 ArrayIndexOutOfBounds를 실행하게됩니다.

+0

그게, 배열에 몇 가지 물건을 수동으로 추가하려고 시도했기 때문에 문제가 해결되었습니다. 그리고 # 2의 좋은 캐치, 죄송합니다. 나는 그것을 질문에 붙여 넣는 것을 잊어 버렸습니다. – MatthewK

관련 문제