调整数组大小

5

如果这是一个普通的数组,我可以创建一个新的数组,然后使用arraycopy进行复制,但是泛型不允许我这样做。到目前为止,我想到的最好的方法是:

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

代码编译通过了,但在运行时出现了空指针异常。有人可以解释一下我哪里做错了吗?


2
有什么原因你不能使用 java.util.ArrayList 吗?它可以处理所有这些问题,而且不需要重新发明轮子。 - corsiKa
如果您正在调整数组大小,那么您可能需要一个通用的ArrayList。 - Cheeso
我熟悉数组和ArrayList,但我只是想学习泛型。感谢您的建议(实际上,ArrayList可能是我会使用的)。 - MatthewK
2个回答

6

您可以使用 Arrays.copyOf(myArray,myArray.length*3) 来进行复制。

我猜测 myArray[0] 是空的,所以 myArray[0].getClass() 抛出了 nullpointer 异常。

如果您需要组件的运行时类型,则可以使用 myArray.getClass().getComponentType()


0

两件事情:

  1. 如果你在 resize() 的第一行得到一个空指针,那可能是因为 myArray[0] 没有值。如果它是 null,你的 getClass() 方法就会失败。

  2. 你似乎没有给 myArray 赋值为 tempArray,所以你很快就会遇到 ArrayIndexOutOfBounds 错误。


就是这样,我尝试手动向数组添加一些内容,问题就解决了,所以问题在别处。关于#2的那个问题你找对了,很抱歉我忘记把它粘贴到问题中了。 - MatthewK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接