Seguridad de tipos y genéricos comodín: comprensión del modificador prohibido
Al trabajar con colecciones genéricas en Java, el concepto de genéricos comodín puede introducir ciertas limitaciones que inicialmente pueden parecer contradictorias. Un buen ejemplo es la imposibilidad de agregar valores a una colección de Java con un tipo genérico comodín.
Considere el siguiente fragmento de código:
List extends Parent> list = ...; Parent p = factory.get(); // returns concrete implementation list.set(0, p); // fails here: set(int, ? extends Parent) cannot be applied to (int, Parent)
¿Por qué no se puede compilar este código? La respuesta está en los mecanismos de seguridad inherentes que aplican los genéricos comodín.
El principio de recuperación sin restricciones y adición restringida
El tipo genérico comodín, denotado por? extiende Parent, representa una lista de elementos que son descendientes de la interfaz Parent. Si bien permite la recuperación sin restricciones de estos elementos, la seguridad de tipos impone restricciones a la hora de agregar valores a la colección.
Si se permitiera compilar el código, permitiría la asignación de una instancia principal a un elemento dentro de la lista. Sin embargo, esta acción podría potencialmente romper la seguridad de tipos.
Considere el siguiente escenario:
ListchildList = new ArrayList(); childList.add(new Child()); List extends Parent> parentList = childList; parentList.set(0, new Parent()); Child child = childList.get(0); // No! It's not a child! Type safety is broken...
En este escenario, una lista de objetos secundarios se convierte en una lista de ? extiende Padre. La asignación posterior de una instancia principal al primer elemento de la lista viola la seguridad de tipos, ya que la lista resultante contiene un elemento que no es una instancia secundaria válida.
Garantizar la seguridad de tipos inmutables
Al prohibir la adición de valores a colecciones genéricas comodín, Java impone seguridad de tipos inmutables. Esto garantiza que los elementos de la lista siempre cumplan con las restricciones impuestas por su tipo declarado.
En ausencia de esta restricción, la seguridad de tipos se vería comprometida, lo que generaría posibles errores y comportamientos inesperados.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3