【问题标题】:How can I get rid of this ClassCastException? (java)我怎样才能摆脱这个 ClassCastException? (爪哇)
【发布时间】:2012-10-11 00:31:29
【问题描述】:

我正在尝试创建一个泛型类“DataStruct”的数组。 代码如下:

public class DataArray<T> {
DataStruct<T>[] array;
int index;

public DataArray(int capacity) {
    array = (DataStruct<T>[]) new Object[capacity]; // !!!
    this.index = 0;
}
}

我得到一个 java.lang.ClassCastException (Ljava.lang.Object; cannot be cast to [LArrayBased.DataStruct;) 在最后用三个感叹号标记的行,同时测试它。

你能告诉我创建它的正确方法吗?

【问题讨论】:

    标签: java arrays exception object casting


    【解决方案1】:

    为什么不声明

    array = new DataStruct[capacity];
    

    Object[] 不能转换为 DataStruct[]

    因为数组本质上是可重构的,这意味着数组在运行时知道它们的类型,所以如果你像下面这样将它转换为Object [],你会再次遇到问题

    Object[] array = new DataStruct[capacity]; 
    array[0] = 10;//Array Store exception
    

    因此,明智的做法是将其声明为DataStruct[capacity]

    【讨论】:

    • 反过来也是不行的(DataStruct[]不能转成Object[])
    • @amit 数组本质上是协变的,所以Object being super type of DataStruct so other way around is allowed.
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2020-01-05
    • 1970-01-01
    • 2020-10-24
    • 2011-03-12
    相关资源
    最近更新 更多