1
respuesta

for (Titulo item: lista)

Hola que tal?. Estoy obteniendo este error en el editor al hacer RUN: /home/claudio/Datos/Java/screenmatch/src/com/alura/screenmatch/principal/PrincipalConListas.java:26:27 java: incompatible types: java.lang.Object cannot be converted to com.alura.screenmatch.modelos.Titulo

Y el for marca Titulo item: subrayado en rojo, las opciones que muestra no solucionan el inconveniente: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

El problema que tenes es que tu lista la declaraste como List< Object > lista... y cuando queres iterar queres que el elemento sea de una clase en especifico lo cual esta mal, si la lista es de Object, cuando hagas el foreach tambien tenes que iterarlo como object, despues de asegurarte que es de una instancia especifica tenes que hacer el casteo. Por Ejemplo

    //Recorremos la lista de objetos
    for (Object item : lista){
        //Verificacmos que el item sea una instancia de Pelicula
        if (item instanceof Pelicula){
            // Al saber que es una instancia de Pelicula hacemos el casteo directo
            Pelicula pelicula = (Pelicula) item;
            //Resto del codigo...
            if(pelicula.getClasificacion() > 2){
                System.out.println(pelicula.getCalsificacion());
            }
        }
    }

tambien podemos ver si es una instancia de Serie, solo agregamos otro if el cual lo verifica y podemos hacer el casteo directo... Tambien si hambos vienen de una clase padre como Titulo (creo que tenia la clase padre) y como clasificacion es una propiedad heredada podes hacer lo siguiente

        List<Titulo> lista = new ArrayList<>();
        //agregas elementos a tu lista y lo recorremos de la siguiente manera
        for (Titulo item : lista){
            System.out.println(item.getNombre());
            if (item.getClasificacion()>2){
                System.out.println(item.getClasificacion());
            }
        }

Como las propiedades Nombre y Clasificacion provienen de un objeto padre en este caso Titulo, podemos hacerlo de la siguiente manera evitando casteos innecesarios, OJO: solo funciona si los atributos y los metodos son heredados de una clase padre. En caso de que quieras acceder a algun metodo o atributo de una clase especifica, ahi si, tenes que hacer el casteo y despues acceder a lo que necesites