我试图使用泛型构建一个简单的列表类。但是,当我尝试打印该值时,它会抛出 classcastexception。声明和初始化泛型数组时有什么问题吗?class vector<E> { static int MAX_LEN = 1234567; E[] data; int[] prv; int to; int size; vector() { data = (E[])new Object[MAX_LEN]; prv = new int[MAX_LEN]; to = -1; size = 0; for(int i = 0; i < MAX_LEN; ++i) { prv[i] = -1; } } void push_back(E e) { data[size] = e; prv[size] = to; to = size; ++size; }}public class Main { public static void main(String[] args) throws Exception { vector<Integer> v = new vector(); v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); for(int i = v.to; i != -1; i = v.prv[i]) { System.out.println(v.data[i]); //<- Exception here } }}
2 回答

慕田峪9158850
TA贡献1794条经验 获得超7个赞
代码有一些错误。
看起来,你已经错过了<>在该行vector<Integer> v = new vector();
从Object[]to的演员表Integer[]永远不会成功
前任:
Integer[] a= (Integer[]) new Object[] {}; // 这个演员永远不会成功
事实上,您只能投射Object[]到Object或Object[]。
当前,当您尝试访问data该main()方法时,编译器为您放入的强制转换Integer[]将在运行时失败。您不需要data数组,只需要数组中的值,您可以通过将以下方法添加到vector类中来获取这些值。
E getData(int index) {
return data[index];
}
在这种情况下,编译器会将强制转换添加到单个元素并为您提供正确的值。

翻过高山走不出你
TA贡献1875条经验 获得超3个赞
你真的有两个选择。要么使用类型data
数组,Object[]
要么创建适当的泛型数组。这是创建通用数组的方法。
vector(Class<E> clazz) { data = (E[])Array.newInstance(clazz, MAX_LEN);
添加回答
举报
0/150
提交
取消