Đây là cách viết Generic (cách viết kiểu tổng quát, từ chữ General mà ra). Generic có từ phiên bản 6 nhưng hoàn thiện nhất ở phiên bản 7 (java1.7). Còn dòng mà bạn trích có thể hiểu nôm na như sau:
public void addItems(GenQueue<? extends E> q)
là hàm để thêm 1 Item q có type (kiểu) là là GenQueue (1 Collection). GenQueue này là 1 collection chứa các item là instance của con, cháu, chắt, … hoặc bản thân E (E = Element, chữ E này giúp chúng ta hiểu kiểu thôi, chứ nó là chữ gì cũng được, ví dụ như K là key, V là value, T là Type, …).
Cách viết generic thường được sử dụng khi viết lib dạng tổng quát (giống kiểu template trong C), ví dụ như ArrayList<T>.
- Khi coder sử dụng typesafe check thì họ viết
ArrayList<Student> để compiler check nếu chẳng may nhét Teacher vào ArrayList nó sẽ báo lỗi ngay. Viết kiểu typesafe ngắn hơn kiểu viết truyền thống là if (s instanceof Student) addStudent(s)…
- Generic cũng giúp coder từ strongtype có thể viết lỏng hơn chút, nghĩa là cho phép bất cứ kiểu T gì. Bạn cho T là Student, Teacher, … hay gì cũng ok, lúc đó ArrayList sẽ typesafe check kiểu được khởi tạo, tránh phải viết ArrayList cho từng type khác nhau. Gỉa sử bạn cần function add cho số nguyên, số thực, số ảo, số phức, số blablablâ … bạn thích viết 1 hàm hay viết nhiều hàm?