在java中将对象[]强制转换为引用类型数组
在通用堆栈的实现中,使用了以下习惯用法,并且工作起来没有任何问题
public class GenericStack<Item> {
private int N;
private Item[] data;
public GenericStack(int sz) {
super();
data = (Item[]) new Object[sz];
}
...
}
然而,当我尝试以下内容时,它会导致ClassCastException
String[] stra = (String[]) new Object[4];
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
你怎么解释
# 1 楼答案
由于泛型类型擦除项数组有效地成为对象数组。因此类型匹配。但当你用具体类型的字符串做的时候,它不会未应用类型擦除,但会失败