es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    List<?> myList = new ArrayList<>();
    // agregar elementos a la lista
    ((ArrayList<?>) myList).ensureCapacity(10); // llamar a un método específico de 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.

Comments are closed.