Recompulsé estáticamente una lib de Java que usaba muchos genéricos, como Collection<?>
, pero el dll .NET emitido solo usa Collection
, no con parámetros de tipo. ¿Cómo?¿No admite IKVM.net los genéricos (parámetros de tipo)?
Respuesta
Los genéricos de Java son tratados por el compilador de Java y se convierten a una versión no genérica en tiempo de compilación. Esto es diferente de .NET donde el CLR tiene soporte de primera clase para los parámetros de tipo. En el nivel de código de bytes, ArrayList<T>
será un simple ArrayList
.
Para citar Java docs:
Generics se implementan por el compilador de Java como una conversión de extremo frontal llamado borrado, que es el proceso de traducción o reescritura de código que utiliza genéricos en código no genérico (es decir, mapea la nueva sintaxis a la especificación JVM actual). En otras palabras, esta conversión borra toda la información de tipo genérico; toda la información entre corchetes angulares se borra. Por ejemplo,
LinkedList<Integer>
se convertirá enLinkedList
. Los usos de otras variables de tipo se reemplazan por el límite superior de la variable de tipo (por ejemplo,Object
), y cuando el código resultante no es de tipo correcto, se inserta una conversión al tipo apropiado.
- 1. parámetros de tipo frente a los genéricos
- 2. Genéricos C# - Restricciones en los parámetros de tipo
- 3. Funciones con los tipos de parámetros genéricos
- 4. genéricos de Java: ¿parámetros genéricos múltiples?
- 5. Comprensión de los genéricos de Java. convenciones de los parámetros de tipo
- 6. ¿Por qué C no admite tipos genéricos implícitos en los constructores de clases?
- 7. C#: Restricción de los tipos de parámetros del método (no parámetros genéricos)
- 8. de tipo no Parámetros
- 9. Reflexión - Obtención de los parámetros genéricos de una instancia System.Type
- 10. parámetros genéricos redundantes
- 11. Genéricos con parámetros genéricos y clase abstracta
- 12. parámetros genéricos variadic
- 13. C# genéricos sintaxis de las limitaciones de los parámetros de tipo múltiple
- 14. Experiencias con IKVM.NET
- 15. ¿Qué uso tienen los atributos en los parámetros genéricos?
- 16. Genéricos o no Genéricos
- 17. C# genéricos no permitirá Delegado Tipo Restricciones
- 18. ¿Por qué Scala no infiere completamente los parámetros de tipo cuando los parámetros de tipo están anidados?
- 19. ¿Están pedidos los parámetros C++ no de tipo para (función)?
- 20. ¿Por qué no pueden los parámetros de tipo de plantilla no ser del tipo de clase
- 21. C parámetros # tipo de especificación
- 22. ORM que admite el mapeo de tipos genéricos
- 23. Genéricos de Java con múltiples parámetros
- 24. ¿Por qué no se reifican los parámetros de tipo genérico de Java en tiempo de ejecución?
- 25. aplicación parcial de los parámetros de tipo
- 26. C# constructor parámetros genéricos de inferencia
- 27. genéricos de Java - Tipo deducir
- 28. Parámetros enlazados de Java en métodos genéricos
- 29. métodos genéricos y Tipo Inferencia en Java
- 30. Parámetros no dependientes del tipo de plantilla
No me gustan los genéricos de Java por este motivo. Los genéricos deberían haber sido una característica importante, pero en su lugar no era mucho más que azúcar sintáctica para evitar lanzar objetos a un tipo específico. El azúcar es maravilloso, pero podría haber sido mucho más. Mumble tipos y realmente agregan valor, así que no es del todo malo. – Joren
@Joren, estás siendo innecesariamente duro con los genéricos. Mientras que la borradura de tipo es ciertamente decepcionante, los genéricos son ciertamente un claro paso adelante para tener que lanzar desde Object ya que ahora podemos tener todas las garantías de tiempo de compilación del sistema de tipo Java con nuestras clases genéricas. – Falaina
Pero la información genérica todavía está disponible en el archivo de clase compilado como metadatos (de lo contrario 'javac' no podría verificar los genéricos). ¿No podría IKVM usar esta información? –