有人能告诉我为什么这会产生编译错误吗?我不明白为什么在第二个 for 循环中强制转换为 A 会导致 strings() 返回一般的对象列表。
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 {
}
}
这是泛型的怪癖吗?
谢谢,克里斯蒂安