Galera estou com dúvidas em relação ao comportamento de um código envolvendo métodos com Generics, segue meu code:
package scjpgenerics;
import java.util.ArrayList;
import java.util.List;
class Animal {
public String nome;
public void emitirSom(){
System.out.println("Emitir Som");
}
}
class Cao extends Animal {
public Cao(String nome){
this.nome = nome;
}
public void emitirSom(){
System.out.println("Latido!");
}
}
class Gato extends Animal {
public Gato(String nome){
this.nome = nome;
}
public void emitirSom(){
System.out.println("Miado!");
}
}
class Veterinario {
public void examinar(List<? super Cao> animais){
animais.add(new Cao("teste"));
for (Animal busca : animais) {
System.out.println(busca.nome + " foi examinado com sucesso.");
}
}
}
public class Main {
public static void main(String[] args) {
List<Animal> animais = new ArrayList<Animal>();
animais.add(new Cao("dog"));
animais.add(new Cao("dog1"));
Veterinario vet = new Veterinario();
vet.examinar(animais);
}
}
No método examinar, da classe Veterinario, não é possível percorrer o ArrayList com o enhanced for…o compilador reclama:
incompatible types
required: Animal
found: Object
Gostaria de saber pq tenho que alterar o tipo para Object?
Depois ainda, para ler a variável corretamente tenho que dar casting (Cao)…