java - 使用通用自定义类时出现 ClassCastException

标签 java

我试图使用泛型构造一个简单的列表类。
但是,当我尝试打印该值时,它抛出了 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
        }
    }
}

最佳答案

代码有一些问题。

  1. 看起来,您错过了 <>在线vector<Integer> v = new vector();
  2. 来自Object[]的 Actor 至Integer[]永远不会成功

例如:

Integer[] a= (Integer[]) new Object[] {}; // this cast will never succeed

事实上你只能施放Object[]ObjectObject[] .

当前当您尝试访问data时在 main()方法,编译器为您放入的强制转换 Integer[]会在运行时失败。您不需要data数组,您只需要其中的值,可以通过将以下方法添加到 vector 来获取该值类。

E getData(int index) {
    return data[index];
}

在这种情况下,编译器会将转换添加到各个元素,并为您提供正确的值。

关于java - 使用通用自定义类时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017546/

相关文章:

java - java读取大文件时做 Action

java - Jsoup:选择具有单个类的元素

java - @ManyToOne 与 JOIN FetchMode 生成内连接

java - 如何在 Java 中重构这个 HashSet

java - 服务器端如何释放端口的LISTEN状态

java - 如何使在一个 Servlet 中初始化的登录 session 在另一个 Servlet 中初始化且中间有 href 的登录 session 无效?

java.io.FileNotFoundException 访问被拒绝

java - GWT - SinkEvent ONCLICK 不起作用

Java 还是 Ruby,有区别吗?

java - 使用用于数据访问的丰富 JavaScript API 开发开放式 Web 应用程序的最佳现代方式是什么?