我试图使用泛型构造一个简单的列表类。
但是,当我尝试打印该值时,它抛出了 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
}
}
}
最佳答案
代码有一些问题。
- 看起来,您错过了
<>
在线vector<Integer> v = new vector();
- 来自
Object[]
的 Actor 至Integer[]
永远不会成功
例如:
Integer[] a= (Integer[]) new Object[] {}; // this cast will never succeed
事实上你只能施放Object[]
至Object
或Object[]
.
当前当您尝试访问data
时在 main()
方法,编译器为您放入的强制转换 Integer[]
会在运行时失败。您不需要data
数组,您只需要其中的值,可以通过将以下方法添加到 vector
来获取该值类。
E getData(int index) {
return data[index];
}
在这种情况下,编译器会将转换添加到各个元素,并为您提供正确的值。
关于java - 使用通用自定义类时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017546/