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.