Pregunta

Me gustan mucho los genéricos y los uso siempre que puedo. De vez en cuando necesito usar una de mis clases en otro proyecto que tiene que ejecutarse en una JVM anterior (antes de 5.0), necesita ejecutarse en JavaME (donde los genéricos tampoco están permitidos) o en Microsoft J # (que tiene MUY pobre Soporte para genéricos).

Por el momento, elimino todos los genéricos manualmente, lo que significa insertar también muchos modelos.

Dado que se dice que los genéricos son solo en tiempo de compilación, y que cada pieza de código genérico podría convertirse automáticamente en código no genérico, me pregunto si hay alguna herramienta que pueda hacer esto por mí.

Si no existe tal herramienta, ¿de qué otra forma podría resolver el problema? ¿Debo dejar de usar genéricos por completo?

Ya hay respuestas relacionadas con compatibilidad de bytecode . ¿Qué sucede si necesito compatibilidad de código fuente por alguna razón?

¿Fue útil?

Solución

Debe usar algo como Retroweaver para lograr este tipo de cosas. Las otras respuestas a esta pregunta son ligeramente engañosas. Los genéricos son una especie de bytecode compatible con versiones anteriores, pero no del todo (consulte java.lang.reflect.Type si no me cree). Además, existe un problema con el atributo de versión de bytecode, que impedirá que una clase compilada contra 1.5 se ejecute en una versión anterior. Retroweaver soluciona ambos problemas al tiempo que habilita otras características de Java 5, como anotaciones y enumeraciones.

Otros consejos

En Netbeans (no estoy seguro de qué IDE está utilizando) puede configurar la compatibilidad del código fuente a una versión de Java establecida, simplemente configúrela en una que admita genéricos. Como ya se publicó, los genéricos son bytecode compatibles con las versiones antiguas de JVM / JRE, por lo que es de esperar que funcionen de fábrica.

Hasta donde sé, Java 5 es no compatible con código de bytes con Java 1.4. Es decir, no puede utilizar clases compiladas de Java 5 con una VM anterior.

Puede verificar retroweaver. Esto se mencionó mucho cuando se introdujeron los genéricos. Personalmente no tengo experiencia con eso.

¿Le preguntaste a Google? Mi búsqueda apareció http://www.publicobject.com/glazedlists/documentation/ Generics_and_Java_1.4_with_one_codebase.pdf , que parece un enfoque muy interesante.

Es compatible con bytecode, debería funcionar de fábrica con un antiguo intérprete.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top