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)); } } |
Para arreglar el código, la forma más fácil es lanzar animales a ArrayList
doc.checkAnimals ((ArrayList
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