studio programacion móviles desarrollo curso aplicaciones java string generics type-safety generic-type-argument

java - programacion - curso android desarrollo de aplicaciones móviles pdf



La cadena se asigna a una lista sin un error de compilación (1)

Este no es un problema de borrado de tipo per se, sino casi lo contrario: se produce un problema en el tiempo de ejecución, cuando el sistema conoce los tipos reales, pero no en el momento de la compilación. La razón por la que esto se compila es que la List es una interfaz. En lo que concierne al compilador, una subclase de String podría implementar esa interfaz, por lo que el compilador puede considerar que podría haber situaciones de tiempo de ejecución válidas en las que el objeto real devuelto sea una String que también sea una List . El compilador no considera que String sea final, y por lo tanto es imposible crear una clase de String implementación de listas.

En cuanto a por qué final no se considera durante la compilación, el comentario de Bohemian a la pregunta da una buena explicación.

Esta pregunta ya tiene una respuesta aquí:

Como sé, uno de los propósitos principales de los genéricos en Java es proporcionar seguridad de tipo de compilación. Si se compila, el código se ejecutará sin problemas.

Entonces, ¿por qué se está compilando el siguiente código?

public static void main(String[] args) { String s = getList(); } private static <T extends List> T getList() { return (T)new ArrayList(); }

Se compila bien. ¿Dónde está mi compilación de tipo seguro? El método getList() no tiene nada en común con la clase String .