Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

[Duda] Creacion de una lista con diferentes tipos de datos

Entiendo que al crear un ArrayList se define el tipo de dato que almacenara, con ayuda del polimorfismo y la herencia podemos hacer que tome distintas formas si se establece el objeto de la super clase dentro del

ArrayList<definimos-superClase> 

se que con ayuda de la clase Object podemos solucionar el promebla ya que todas las clases heredan de esta, es decir si defino

ArrayList<Object>

podre almacenar cualquier obejo. Como en el ejemplo puedo agregar objetos tipo DatosTemporada, DatosEpisodio, y culquier otro modelo que definamos en el proyecto. pero existe alguna otra forma de hacer este proceso, es decir las clases record pueden heredar de alguna clase, las clases record pueden tener metodos, pueden tener metodos mefinidos o metodos abstractos. ??

3 respuestas

es decir si defino mi ArrayList

¡Hola Janson, espero que estés bien!

Entiendo que estás buscando una forma de crear una lista que pueda almacenar diferentes tipos de datos, incluyendo clases que heredan de distintas superclases o incluso clases record con métodos definidos o abstractos. Alternativas al uso de ArrayList<Object> para almacenar clases Record en Java:

  1. Interfaz común:

Definir una interfaz que agrupe las características comunes de las clases Record que deseas almacenar en el ArrayList. Las clases Record pueden implementar esta interfaz y luego usar ArrayList<InterfazComún>. Ejemplo:

interface InformacionEpisodio {
    String getTitulo();
    int getNumeroEpisodio();
    // Otros métodos comunes
    
    ArrayList<InformacionEpisodio> episodios = new ArrayList<>();
    episodios.add(new EpisodioRecord("El regreso del Jedi", 6));
    episodios.add(new TemporadaRecord("Star Wars: The Mandalorian", 1));
}

Ventajas:

  • Mayor organización y claridad en el código.
  • Permite definir métodos comunes a las clases Record.
  • Facilita la futura incorporación de nuevas clases Record compatibles. Desventajas:
  • Requiere crear una interfaz adicional.
  • Puede aumentar la complejidad del código si la interfaz es demasiado compleja.
  1. Clase abstracta base:

Crear una clase abstracta base que las clases Record hereden. Esta clase abstracta puede definir métodos comunes y atributos. El ArrayList se declara como ArrayList<ClaseAbstractaBase>. Ejemplo:

abstract class Informacion {
    abstract String getTitulo();
    // Otros métodos comunes
}

class EpisodioRecord extends Informacion {
    private String titulo;
    private int numeroEpisodio;

    // Constructor, getters, setters y otros métodos
}

class TemporadaRecord extends Informacion {
    private String titulo;
    private int numeroTemporada;

    // Constructor, getters, setters y otros métodos
}

ArrayList<Informacion> informacion = new ArrayList<>();
informacion.add(new EpisodioRecord("El regreso del Jedi", 6));
informacion.add(new TemporadaRecord("Star Wars: The Mandalorian", 1));

Ventajas:

  • Similar a la interfaz común, pero con mayor flexibilidad.
  • Permite definir métodos abstractos que las clases Record deben implementar.
  • Puede ser útil si se desea compartir código entre las clases Record. Desventajas:
  • Requiere crear una clase abstracta adicional.
  • Puede aumentar la complejidad del código si la clase abstracta es demasiado compleja.

En resumen: las alternativas 1 y 2 son las opciones preferidas para almacenar clases Record en un ArrayList. La elección entre ambas depende de las necesidades específicas del proyecto y de la preferencia personal del desarrollador.

Espero que estas sugerencias te sean de ayuda para lograr tu objetivo. Si tienes alguna otra pregunta o necesitas más detalles, no dudes en preguntar.

Espero haber ayudado y buenos estudios!

solución!

Hola Brenda, espero que te encuetres bien.. Con relacion a tu respuesta, con la opcion uno, al crear una interfaz que abstraiga algunos comportamientos o caracteristicas de las clases record y al implementarlar en ellas (la interfaz en las clases record), entiendo que en todas se sobreescribirar los metodos concretos creados en la interfaz. si es asi,, no se estaria incumpliedo el principio solid de (El Principio de segregación de interfaz)..?