代码之家  ›  专栏  ›  技术社区  ›  Peter Hwang

使用泛型自定义类时的ClassCastException

  •  0
  • Peter Hwang  · 技术社区  · 7 年前


    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 回复  |  直到 7 年前
        1
  •  1
  •   Ramanlfc    7 年前

    代码有一些地方出错。

    1. 看起来,你错过了一个 <> vector<Integer> v = new vector();
    2. 演员 Object[] 到 Integer[] 永远不会成功

    前任:

    整数[]a=(整数[])新对象[]{};//这个角色永远不会成功

    对象[] Object 或 对象[] .

    当前当您尝试访问 data main() 方法,编译器为您输入的强制转换 整数[] 将在运行时失败。你不需要 数据 数组中,您只需要它的值,您可以通过将以下方法添加到 vector 班级。

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

        2
  •  1
  •   tsolakp    7 年前

    你有两个选择。任意使用 data Object[] 键入或创建适当的泛型数组。下面是如何创建泛型数组。

        vector(Class<E> clazz) {
            data = (E[])Array.newInstance(clazz, MAX_LEN);