Categorías
Generics

Un problema de ejemplo de tipos genéricos

El siguiente código tiene errores de compilación. Es confuso porque piensa en algún lugar para encontrar el problema.

import java.util.*;
abstract class Animal{
    public abstract void checkup();
}
class Dog extends Animal{
    public void checkup(){
        System.out.println("Dog checkup");
    }
}
class Cat extends Animal{
    public void checkup(){
        System.out.println("Cat checkup");
    }
}
class Bird extends Animal{
    public void checkup(){
        System.out.println("Bird checkup");
    }
}
public class AnimalDoctorGeneric {
    private void checkAnimals(ArrayList<Animal> animals){
        for(Animal a : animals){
            a.checkup();
        }
    }
    private void addAnimals(List<Animal> animals){
        animals.add(new Dog());
    }
    public static void main(String [] args){
        List<Animal> animals = new ArrayList<Animal>();
        animals.add(new Dog());
        animals.add(new Dog());
        AnimalDoctorGeneric doc = new AnimalDoctorGeneric();
        doc.addAnimals(animals);
        doc.checkAnimals(animals);// error here!!!!
        //doc.checkAnimals((ArrayList<Animal>) animals); this line is the correct code
        //to use checkAnimals method, the argument has to be correct type. 
        //System.out.println(animals.get(1) + " " + animals.get(2));
    }
}
  https://www.programcreek.com/2008/12/53/

Para arreglar el código, la forma más fácil es lanzar animales a ArrayList. Entonces, para cambiar la línea 36 a:
doc.checkAnimals ((ArrayList) animales);

La razón es que la clase ArrayList implementa la interfaz List, son diferentes, List debe convertirse en ArrayList para satisfacer el método checkAnimals (ArrayList animales).

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *