I think there must be something subtle going on here that I don't know about. Consider the following:
public class Foo<T> {
private T[] a = (T[]) new Object[5];
public Foo() {
// Add some elements to a
}
public T[] getA() {
return a;
}
}
Suppose that your main method contains the following:
Foo<Double> f = new Foo<Double>();
Double[] d = f.getA();
You will get a CastClassException
with the message java.lang.Object
cannot be cast to java.lang.Double
.
Can anyone tell me why? My understanding of ClassCastException
is that it is thrown when you try to cast an object to a type that cannot be casted. That is, to a subclass of which it is not an instance (to quote the documentation). e.g.:
Object o = new Double(3.);
Double d = (Double) o; // Working cast
String s = (String) o; // ClassCastException
And it seems I can do this. If a
was just a T
instead of an array T[]
, we can get a
and cast it without a problem. Why do arrays break this?
Thanks.