泛型、数组和 ClassCastException
我认为这里一定有什么我不知道的微妙的事情发生。请考虑以下事项:
public class Foo<T> {
private T[] a = (T[]) new Object[5];
public Foo() {
// Add some elements to a
}
public T[] getA() {
return a;
}
}
假设您的 main 方法包含以下内容:
Foo<Double> f = new Foo<Double>();
Double[] d = f.getA();
你会得到一个与消息不能被强制转换为 。CastClassException
java.lang.Object
java.lang.Double
谁能告诉我为什么?我的理解是,当您尝试将对象强制转换为无法强制转换的类型时,会抛出它。也就是说,对于它不是其实例的子类(引用文档)。例如:ClassCastException
Object o = new Double(3.);
Double d = (Double) o; // Working cast
String s = (String) o; // ClassCastException
看来我能做到。如果 只是 一个 而不是一个数组 ,我们可以毫无问题地获取并转换它。为什么数组会破坏它?a
T
T[]
a
谢谢。