Java 为什么会引发ArrayStoreException?
我正在尝试编写自己的ArrayList类 我的代码如下:Java 为什么会引发ArrayStoreException?,java,Java,我正在尝试编写自己的ArrayList类 我的代码如下: package test; import java.util.Arrays; import java.util.*; public class MyArrayList { private Object[] objects = null; private int currentSize = 0; public void add(Object obj) { increaseSize();
package test;
import java.util.Arrays;
import java.util.*;
public class MyArrayList {
private Object[] objects = null;
private int currentSize = 0;
public void add(Object obj) {
increaseSize();
objects[currentSize++] = obj;
}
public Object get(int index) {
if (currentSize >= index)
return objects[index];
else
throw new ArrayIndexOutOfBoundsException();
}
public void remove(int index) {
if (currentSize >= index) {
for (int i = index; i < currentSize; i++) {
objects[i] = objects[i + 1];
}
objects[currentSize--] = null;
}
else throw new ArrayIndexOutOfBoundsException();
}
public int size() {
return currentSize;
}
private void increaseSize() {
if (objects == null) objects = new Objects[1];
else objects = Arrays.copyOf(objects, objects.length + 1);
}
public static void main(String args[]) {
MyArrayList l = new MyArrayList();
Integer integ = new Integer(1);
l.add(integ);
for (int i = 0; i < l.size(); i++)
System.out.println("Element " + i + " = " + l.get(i));
}
}
封装测试;
导入java.util.array;
导入java.util.*;
公共类MyArrayList{
私有对象[]对象=null;
私有int currentSize=0;
公共无效添加(对象obj){
增加大小();
对象[currentSize++]=obj;
}
公共对象get(int索引){
如果(当前大小>=索引)
返回对象[索引];
其他的
将新的ArrayIndexOutOfBoundsException()抛出;
}
公共无效删除(整型索引){
如果(当前大小>=索引){
对于(int i=索引;i
如果我试图初始化increaseSize()中的对象,则会得到ArrayStoreException。如果我在一开始初始化对象,我就不会再出现这种异常
谁能解释一下原因吗 您的问题是一个非常简单的错误: 您不是在创建对象数组,而是在创建对象s数组 这将只允许存储对象。因此,当您尝试添加Integer对象时,会出现ArrayStoreException。因为Integer不是对象。(java.lang.Objects是一个具有一些静态帮助器方法的实用程序类) 因此,只需更改为:
objects = new Object[1];
您正在创建类型为
对象的数组
:
if (objects == null)
objects = new Objects[1];
Objects
是java.util.Objects
,因为您已经从java.util
导入了所有内容:
import java.util.*;
虽然您可能指的是对象的数组
s:
if (objects == null)
objects = new Object[1];
当您尝试在数组中存储某些东西时发生错误。不幸的是,java中的数组类型是协变的,这导致了类似的问题。
提示:当创建和抛出异常时,考虑为它们提供消息。使调试更加容易。现在您将看到刚才抛出了一些异常;但您没有提供任何有助于调试的信息(如currentSize和index的值)。和:总是在你的街区周围使用{};即使只是一行别的东西。objects=newobjects[1]
-objects是一个打字错误吗?@AndyTurner:这是一个很好的添加,不需要回滚,谢谢。