Genéricos, matrizes e ClassCastException
Eu acho que deve haver algo sutil acontecendo aqui que eu não conheço. Considere o seguinte:
public class Foo<T> {
private T[] a = (T[]) new Object[5];
public Foo() {
// Add some elements to a
}
public T[] getA() {
return a;
}
}
Suponha que seu método principal contenha o seguinte:
Foo<Double> f = new Foo<Double>();
Double[] d = f.getA();
Você receberá umCastClassException
com a mensagemjava.lang.Object
não pode ser convertido parajava.lang.Double
.
Alguém pode me dizer o porquê? Meu entendimento deClassCastException
é que ele é lançado quando você tenta converter um objeto em um tipo que não pode ser convertido. Ou seja, para uma subclasse da qual não é uma instância (para citar a documentação). por exemplo.:
Object o = new Double(3.);
Double d = (Double) o; // Working cast
String s = (String) o; // ClassCastException
E parece que posso fazer isso. E sea
era apenas umT
em vez de uma matrizT[]
, podemos pegara
e jogue sem problemas. Por que matrizes quebram isso?
Obrigado.