2011-09-05 136 views
5

如果这是一个常规数组,我可以创建一个新数组,然后执行arraycopy,但泛型不会让我这样做。我想出了迄今最好的事情是:调整阵列大小

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

它编译,但在运行时,我得到一个空指针异常。任何人都可以解释我做错了什么?

+2

任何原因'java.util.ArrayList'不适合你?它可以处理所有这些以及更多,无需重新发明轮子。 – corsiKa

+0

如果您要调整数组大小,您可能需要一个通用ArrayList。 – Cheeso

+0

我很熟悉Arrays和ArrayLists,但我只是想了解泛型。感谢您的建议(实际上,我可能会使用ArrayList)。 – MatthewK

回答

6

可以使用Arrays.copyOf(myArray,myArray.length*3),使复印件

我的猜测是,myArray[0]是空,因此myArray[0].getClass()抛出

,如果你需要的组件的运行时类型可以使用空指针myArray.getClass().getComponentType()

0

两个东西:

  1. 如果你得到null pointe r在第一行resize()这可能是因为你在myArray[0]中没有价值。如果那是空的,你的getClass()会炸弹。

  2. 您似乎没有指定myArray = tempArray,因此您可能很快会遇到ArrayIndexOutOfBounds。

+0

就是这样,我尝试手动添加一些东西到数组中,并修复它,所以问题在别处。并且很好地抓住#2,抱歉,我忘了将其粘贴到问题中。 – MatthewK