30/09/2018, 23:55
Nhờ mọi người giải thích giúp em đoạn code trong java này với ạ!
class GenQueue<E> {
private LinkedList<E> list = new LinkedList<E>();
public void enqueue(E item) {
list.addLast(item);
}
public E dequeue() {
return list.poll();
}
public boolean hasItems() {
return !list.isEmpty();
}
public int size() {
return list.size();
}
public void addItems(GenQueue<? extends E> q) {
while (q.hasItems())
list.addLast(q.dequeue());
}
}
public void addItems(GenQueue<? extends E> q) . em ko hiểu dòng này, mong mọi người giải thích giúp em. thanks!
Bài liên quan
Đâ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:
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>
.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)…nhưng dấu “?” là thế nào ạ?
hinh như dấu ? là đai diện cho 1 kiểu dữ liệu tổng quát vì tại thời điểm thực thi thì mới có thể xác định được đó là kiểu gì …
Dấu ? là any type that extends E (là con, cháu - subclass, sub sub subclass, … của E).
Ngoài ? extends E ra còn có ? super E.
Ví dụ:
Cat extends Animal
SexyCat extends Cat
Ví dụ mình có một object là
GenQueue<Cat>
, lúc đó mình có thể gọi hàmaddItems(GenQueue<? extends E> q)
với q làGenQueue<Cat>
cũng được màGenQueue<SexyCat>
cũng ok vì SexyCat là extends của Cat.em cảm ơn nhiều ạ. hi