¿Puede alguien decirme por qué esto da un error de compilación? No veo por qué el molde a A en el segundo bucle for causa cadenas() para devolver una Lista de objetos general.Comportamiento extraño con el método parametrizado en la clase abstracta
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 {
}
}
¿Es esto una peculiaridad de Generics?
Gracias, Kristian
Eso es realmente interesante. Eso explica por qué si lanzas a A > en lugar de solo A, funciona. En ese caso, todavía estás usando una clase escrita. – Shaun
+1 Gracias por esta gran respuesta. Eliminé mi propia respuesta, que no fue tan buena como esta. – KLE
@Shaun, yup. ¡Parcialmente, es cuestión de molestarlo para evitar el uso de tipos crudos! – notnoop