2008-12-17 22 views

Respuesta

9

Para permitir la compatibilidad binaria con bytecode pre-genéricos, lo que permite que el nuevo código interactúe con el código anterior.

Desde la página Type Erasure de los tutoriales de Java:

Tipo borrado permite que las aplicaciones Java que utilizan genéricos para mantener compatibilidad binaria con las bibliotecas de Java y aplicaciones que se crearon antes genéricos.

[...] existe

Tipo borrado de manera que el nuevo código puede continuar para interactuar con el código heredado .

Para una pregunta relacionada, eche un vistazo a C# vs Java generics.

4

recuerdo haber leído algo acerca de esto en el libro de Java Hardcore:

El problema con los elementos en comprobar una colección en tiempo de ejecución es que es extremadamente caro ; el orden de eficacia es solo O (n). Si tiene solo 10 direcciones en su colección, elementos de verificación es fácil. Sin embargo, si la colección contiene 15,000 direcciones, entonces incurriría en una sobrecarga significativa cada vez que alguien llama al colocador.

Por otro lado, si se puede evitar que los usuarios colocar que no sea una dirección nada en su colección en tiempo de compilación, entonces no tendría que comprobar los tipos en tiempo de ejecución . Si intentan darle algo que no es una dirección, entonces el compilador rechazará el intento. Esto es exactamente lo que hacen los tipos parametrizados.

Sin embargo, "por qué" nunca puede realmente ser contestadas de manera satisfactoria, porque hay demasiadas variables involucradas con la gente, el tiempo, el lugar y la política. Recuerdo haber leído en otro lado que la decisión tenía mucho que ver con mantener la compatibilidad con la forma en que se estaban haciendo las cosas en el código de bytes de Java. Aquí hay otra cita del mismo libro:

Después de que el compilador haya resuelto el tipo de seguridad introducido por los genéricos, borra la parametrización del tipo. Por lo tanto, la información no está disponible en tiempo de ejecución. El propósito del borrado, según lo establecido por Sun, es permitir que las bibliotecas de clases construidas con una versión anterior del JDK puedan ejecutarse en la máquina virtual JDK 1.5.

Tengo curiosidad, ¿cuáles son las ventajas que ofrecen los genéricos en tiempo de ejecución?

Cuestiones relacionadas