estaba leyendo this artículo, y se dice que:instancia de clase obtenida a través de cargador de clases múltiples
Si tenemos dos instancias de la clase Estudiante cargado por estos CustomClassLoaders dicen STUDENT1 y student2, entonces STUDENT1 y student2 no son tipo compatible. En otras palabras,
Estudiante student3 = (Estudiante) student2;
arrojará ClassCastException, porque la JVM ve estos dos como tipos de clases separadas y distintas, ya que están definidas por diferentes instancias de ClassLoader.
Ahora entiendo lo que quiere transmitir: es decir, si cargamos la misma clase utilizando dos cargadores de clases diferentes, entonces no serán compatibles con el tipo. Hasta aquí todo bien.
Pero el ejemplo que se ha utilizado es lo que me confunde, es decir
student3 = (Estudiante) student2 Estudiante;
No será que cuando declaramos una variable como refrance Estudiante estudiante, lo compilador todas busca es que este studnet está presente en su ubicación correcta en cumplimiento de su paquete de structure.Now cuando en tiempo de ejecución asignamos esta variable de referencia a una clase cargada real, ¿realmente importa qué cargador de clases usemos para cargar dicha clase? Dudo, porque desde mi entendimiento, un cargador de clases entra en juego solo cuando hacemos un ' nuevo 'o lo llamamos campo estático y no cuando simplemente declaramos un tipo de él.
Por favor aclararme sobre esto y ayudarme a rectificar mi entendimiento al respecto.
Gracias, Mawia
Pero lo que hizo que jvm piense que los dos son diferentes. Hasta ahora, no hay ningún cargador de clases asociado con student3. Sólo student2 se asigna a un objeto cargado por algún cargador de clases. – mawia
@mawia: Sí, lo hay: para realizar el control, la JVM tiene que cargar la clase para 'student3'. Entonces, podrías decir que la carga de clases también ocurre para las asignaciones de variables. o cuando llamas a 'Class.forName()' –