Ai đó có thể cho tôi biết lý do tại sao điều này mang lại lỗi biên dịch không? Tôi không thấy lý do tại sao các diễn viên để A trong thứ hai cho vòng lặp gây ra chuỗi() để trả về một danh sách chung của các đối tượng.Hành vi lạ với phương pháp tham số trên lớp trừu tượng
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 {
}
}
Đây có phải là một quirk Generics không?
Cảm ơn, Kristian
Điều đó thực sự thú vị. Điều đó giải thích tại sao nếu bạn chuyển sang A > thay vì chỉ A nó hoạt động. Trong trường hợp đó bạn vẫn đang sử dụng một lớp được đánh máy. – Shaun
+1 Cảm ơn câu trả lời tuyệt vời này. Tôi đã xóa câu trả lời của riêng mình, điều đó không tốt bằng câu trả lời này. – KLE
@Shaun, yup. Một phần, đó là vấn đề gây phiền nhiễu cho bạn để tránh sử dụng các loại thô! – notnoop