La API de Collections.checked *() de Java nos proporciona vistas de tipo seguro para colecciones subyacentes. Pero las comprobaciones ocurren en tiempo de ejecución y arrojan una excepción de tiempo de ejecución que puede ser costoso para el rendimiento. La misma comprobación de tipo se puede aplicar en tiempo de compilación dando un tipo específico a esas colecciones mediante el uso de colecciones genéricas. Entonces, ¿hay situaciones en las que Collections.checked *() puntúe sobre colecciones genéricas con sus tipos especificados?Java Collections.checked *() versus colecciones genéricas
Respuesta
el Javadoc lo explica bien:
El mecanismo de los genéricos en el lenguaje proporciona en tiempo de compilación (estática) comprobación de tipos, pero es posible derrotar a este mecanismo con los moldes sin marcar. Por lo general, esto no es un problema, ya que el compilador emite advertencias en todas las operaciones no verificadas. Sin embargo, hay momentos en que la verificación de tipo estático por sí sola no es suficiente. Por ejemplo, supongamos que una colección se pasa a una biblioteca de terceros y es imperativo que el código de la biblioteca no corrompa la colección insertando un elemento del tipo incorrecto.
Al usar una biblioteca antigua con tipos no seleccionados en un nuevo proyecto de 1.5+.
La principal diferencia es que la verificación en tiempo de compilación se puede eludir fácilmente, tanto accidental como conscientemente.
El compilador indicará, si eso sucede, pero las advertencias se ignoran fácilmente y el problema puede ocurrir en alguna biblioteca en algún lugar. La información de tipo proporcionada por los genéricos es confiable, pero solo si todo el código involucrado se compila sin ninguna advertencia relacionada con los genéricos: sin moldes no verificados, sin tipos crudos.
El uso de Collections.checked*()
le proporciona una forma de aplicar la restricción, incluso cuando utiliza un código que está fuera de su control (siempre que pueda pasar una colección propia).
Collectons.checkedXxxxx() realiza controles de tiempo de ejecución proporcionan seguridad adicional. El compilador se puede evitar mediante el borrado de tipo, sin embargo, las colecciones comprobadas siempre deben verificar que el tipo sea correcto.
Dudo que la diferencia de rendimiento sea suficiente para preocuparse. Es probable que sea de aproximadamente 10 ns o menos.
- 1. Colecciones genéricas de PowerShell
- 2. ¿Qué son las colecciones genéricas en C#?
- 3. WCF: serializar y deserializar colecciones genéricas
- 4. método genérico que regresan diferentes colecciones genéricas
- 5. Para usar colecciones genéricas anidadas o clases intermedias personalizadas?
- 6. Java Play2: ¿plantillas genéricas?
- 7. ¿Las colecciones no genéricas en .NET están obsoletas?
- 8. colecciones java vs mapa en colecciones framework
- 9. C# vs Java - Listas genéricas
- 10. Java Commons Colecciones removeAll
- 11. Colecciones Java (estructura LIFO)
- 12. Java problema colecciones covarianza
- 13. Java/Scala (profundidad) colecciones interoperabilidad
- 14. Java delimitada limitaciones genéricas en los campos
- 15. Interfaces genéricas y no genéricas
- 16. _Expand versus new versus GNU
- 17. pymssql versus pyodbc versus adodbapi versus ...
- 18. Dónde se almacenan los tipos de valores en (C#) Colecciones genéricas
- 19. ¿Alguien sabe qué sucede si no implementa iequtalable cuando usa colecciones genéricas?
- 20. Timer & TimerTask versus Thread + sleep en Java
- 21. Autoboxing versus boxeo manual en Java
- 22. Java fusionar 2 colecciones en O (1)
- 23. Colecciones Java: ¿qué colección usar y cuándo?
- 24. Comparación de dos colecciones en Java
- 25. Colecciones similares a Java en Delphi
- 26. Colecciones de Java con objetos mutables
- 27. Colecciones de Java con el comodín
- 28. Colecciones de cadenas rápidas en Java
- 29. Iteraciones sobre colecciones de Java en Scala
- 30. ¿Qué biblioteca de Colecciones Java recomienda?
porque trabajas en una compañía financiera, cuando necesitas pedir cambiar una biblioteca, y enfrentas un proceso burocrático de varios meses. Sí, tienes razón, debería conseguir un mejor trabajo ... –