5
有人可以告訴我爲什麼會出現編譯錯誤?我不明白爲什麼在第二個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 {
}
}
這是一個泛型的怪癖嗎?
謝謝你,克里斯蒂安
這真的很有趣。這就解釋了爲什麼如果你投給A >而不是A,它就可以工作。在這種情況下,你仍然在使用一個類型化的類。 – Shaun 2010-01-07 14:05:27
+1感謝您的這個偉大的答案。我刪除了自己的答案,這不如這個。 – KLE 2010-01-07 14:06:30
@Shaun,你好。部分原因是爲了避免使用原始類型而煩惱你的問題! – notnoop 2010-01-07 14:09:47