¿Puede alguien explicarme por qué la línea marcada //this line gives a compile error (why?)
en el siguiente ejemplo de código no funciona?¿Por qué no funciona el lanzamiento de un genérico de ArrayList a una superclase?
import java.util.ArrayList;
public class GenericCastCheck {
class A{
}
class B extends A{
}
public static void main(String[] args) {
A aObject = new A();
B bObject = new B();
//this line works fine
aObject = bObject;
//this line gives a compile (expected)
bObject = aObject;
ArrayList<A> aList = new ArrayList<A>();
ArrayList<B> bList = new ArrayList<B>();
//this line gives a compile error (why?)
aList = bList;
//this line gives a compile error (expected)
bList = aList;
}
}
En concreto, cuando se dice que es de tipo bList
ArrayList<B>
, ¿No significa que cada elemento de la misma es una instancia de B
? Si es así, ¿cuál es el problema al convertirlo a ArrayList<A>
, si podemos convertir instancias individuales de B
en A
?
Gracias.
Muchas gracias. Me di cuenta de que debería usar 'aList = new ArrayList (bList);' en lugar de 'aList = bList', que también se compila bien. :) – Animesh