Tôi muốn hỏi về các quy tắc xóa loại java.Java Generics type erasure
Nếu chúng ta có các lớp học:
public class Shape{}
public class Circle extends Shape{}
public class Base<T extends Shape>{
T x;
public void setX(T t){}
}
public class MainClass(){
public static void main(String... _arg){
Base<? extends Shape> bs = new Base<Circle>();
bs.setX(new Circle()); // <- compilation problem
}
}
bạn có thể vui lòng giải thích cho tôi tại sao gọi setX() phương pháp gây ra vấn đề biên soạn?
'? super Shape' sẽ hoạt động ở đó. "Nhà sản xuất mở rộng, Siêu tiêu dùng" –
@MichaelMyers: Au contraire: http://ideone.com/TYr10C. 'Base super Shape> 'chấp nhận một' Base' của bất kỳ * supertype * nào của 'Shape'. –