如何将一个对象数组转换为另一种类型?

时间:2020-06-22 13:28:17

标签: java arrays casting

我想使用一个类来创建一个Objects数组,然后将该数组转换为它的类型,而无需转换其中的每个Object,这可能吗?

这是我到目前为止尝试过的:

class Bar {
    public void hello() {
        System.out.println("Hello from inside of bar");
    }
}

使用类创建对象数组:

class Arr<T> {

    Object[] obj;
    int i = 0;

    public Arr(int size) {
        obj = new Object[size];
    }

    public void add(T t) {
        obj[i] = t;
        i++;
    }
}

第二次尝试,使用T而不是Object定义数组:

class ArrTwo<T> {

    T[] obj;
    int i = 0;

    public ArrTwo(int size) {
        obj = (T[]) new Object[size];
    }

    public void add(T t) {
        obj[i] = t;
        i++;
    }
}

和主要部分:

class Main {

    public static void main(String args[]) {
        TestArr();
        TestArrTwo();
    }

    public static void TestArr() {
        Arr<Bar> arr = new Arr<Bar>(1);
        arr.add(new Bar());
        Bar barArr[] = (Bar[]) arr.obj; // java.lang.ClassCastException
        barArr[0].hello();
    }

    public static void TestArrTwo() {
        ArrTwo<Bar> arr = new ArrTwo<Bar>(1);
        arr.add(new Bar());
        Bar barArr[] = (Bar[]) arr.obj;  // java.lang.ClassCastException
        barArr[0].hello();
    }
}

两个测试功能都给我这个错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LBar;

0 个答案:

没有答案
相关问题