¿Cómo es que no hay error de compilación al enumerar el número en la lista? Pensé que los tipos tenían que ser relacionados.Reparto de referencia explícito de Java
Number k = 10;
List m = new ArrayList();
m = (List)k;
¿Cómo es que no hay error de compilación al enumerar el número en la lista? Pensé que los tipos tenían que ser relacionados.Reparto de referencia explícito de Java
Number k = 10;
List m = new ArrayList();
m = (List)k;
Sólo una conjetura, pero creo que tiene algo que ver con m
siendo una referencia de interfaz. Si lo cambia a ArrayList m = new ArrayList();
, muestra un error de tiempo de compilación.
Pensé que los tipos tenían que ser relacionados.
El número es una clase (resumen) y List es una interfaz para que puedan relacionarse a través de otra clase.
por lo que técnicamente podría tener
class Foo extends Number implements List
{
...
}
y
Number k = ... ; //
List m = new Foo();
m = (List) k;
podría ser legal y se quedará sin excepción si k está apuntando a un tipo compatible con Foo
.
Por lo tanto, si hace referencia a un objeto por una interfaz, la resolución se aplaza hasta el tiempo de ejecución.
Eso tiene sentido. –
debería ser 'clase MyFooImpl extiende MyFoo {}' en lugar de 'clase MyFooImpl {}'? De todos modos, todos los errores de tiempo de compilación son cuando la asignación es una referencia de tipo de clase. –
Encontré un comportamiento similar al trabajar con C#. –
Su clase de número, ¿es del paquete java.lang? – secmask