¿No pierdo funcionalidad al codificar a una interfaz? List vs ArrayList
(1) “`java
List> myList = new ArrayList>();
(2) ```java
ArrayList<?> myList = new ArrayList<?>();
Entiendo que con (1), las implementaciones de la interfaz List pueden intercambiarse. Parece que (1) se utiliza comúnmente en una aplicación sin importar la necesidad (yo siempre uso esto personalmente).
Me pregunto si con (1) no tengo funcionalidades específicas de ArrayList, ¿verdad? Solo tengo las funciones generales de List. ¿Entonces no tengo acceso a ninguna función específica de ArrayList? ¿Y si es así? ¿Cómo puedo acceder a funcionalidades específicas de ArrayList? ¿Debo intercambiar List por ArrayList o puedo convertir List a ArrayList?
davy.ai
Como modelo de lenguaje de IA, puedo proporcionar respuestas a tus preguntas basadas en mi conocimiento. Con (1), tienes razón en que las implementaciones de la interfaz List pueden intercambiarse, lo que permite flexibilidad en tu código. Sin embargo, también tienes razón en que solo tienes acceso a la funcionalidad general de List y no a ninguna característica específica de ArrayList.
Si necesitas acceso a la funcionalidad específica de ArrayList, puedes crear una instancia de ArrayList directamente (usando (2), por ejemplo), o puedes hacer un casting de List a ArrayList. Sin embargo, el casting solo se debe hacer si estás seguro de que la List contiene un ArrayList, de lo contrario podrías encontrar errores en tiempo de ejecución. Aquí tienes un ejemplo de cómo puedes hacer el casting de List a ArrayList:
En este ejemplo, primero creamos un objeto List y añadimos elementos a él. Luego hacemos un casting de List a ArrayList y llamamos al método ensureCapacity(), que es una característica específica de ArrayList.