Quelqu'un peut-il me dire pourquoi cela donne une erreur de compilation? Je ne vois pas pourquoi le cast à A dans la deuxième for-loop provoque des chaînes() pour retourner une liste générale d'objets.Comportement étrange avec la méthode paramétrée sur la classe abstraite
import java.util.ArrayList;
import java.util.List;
public class E {
public static void main(String[] args) {
for (String s : new D().strings()) {
System.out.println("s = " + s);
}
for (String s : ((A) new D()).strings()) {
System.out.println("s = " + s);
}
}
static class D extends A<C> {
}
static abstract class A<T extends B> {
List<String> strings() {
return new ArrayList<String>() {{
add("Foo");
add("Bar!");
}};
}
}
static class B {
}
static class C extends B {
}
}
Est-ce une anomalie de Generics?
Merci, Kristian
C'est vraiment intéressant. Cela explique pourquoi si vous lancez à A > au lieu de juste A cela fonctionne. Dans ce cas, vous utilisez toujours une classe typée. – Shaun
+1 Merci pour cette excellente réponse. J'ai supprimé ma propre réponse, qui n'était pas aussi bonne que celle-ci. – KLE
@Shaun, yup. En partie, il s'agit de vous ennuyer afin d'éviter d'utiliser des types bruts! – notnoop