我认为这里一定有一些我不知道的微妙之处。考虑以下:
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
只是 aT
而不是 array T[]
,我们可以a
毫无问题地获取和转换它。为什么数组会破坏这个?
谢谢。