Chú thích của Josh Bloch PECS hữu ích tại đây. Nó là viết tắt của:
Nhà sản xuất extends
, Consumer super
Điều này có nghĩa rằng khi một kiểu tham số được truyền đến một phương pháp sẽ sản xuất trường hợp của T
(họ sẽ được lấy ra khỏi nó một cách nào đó), ? extends T
nên được sử dụng, vì bất kỳ trường hợp nào của một lớp con của T
cũng là một số T
.
Khi một kiểu tham số được truyền đến một phương pháp sẽ tiêu thụ trường hợp của T
(họ sẽ được chuyển đến nó để làm một cái gì đó), ? super T
nên được sử dụng bởi vì một thể hiện của T
hợp pháp có thể được thông qua bất kỳ phương pháp chấp nhận một số siêu kiểu của T
. Ví dụ: Comparator<Number>
có thể được sử dụng trên Collection<Integer>
. ? extends T
sẽ không hoạt động, bởi vì Comparator<Integer>
không thể hoạt động trên Collection<Number>
.
Edit: Để làm rõ hơn một chút về get/đặt (sản phẩm/tiêu thụ):
public T something();
^
Trên đây là một phương pháp sản xuất T
.
public void something(T t);
^
Ở trên là phương pháp tiêu thụ T
.
"Nhà sản xuất extends
, Người tiêu dùng super
" áp dụng cho cách phương thức đối tượng được tham số được chuyển đến sẽ sử dụng đối tượng đó. Trong trường hợp của Collections.max()
, các mục sẽ được truy xuất từ Collection
, do đó, nó là một nhà sản xuất. Các mục đó sẽ được chuyển làm đối số cho phương thức trên Comparator
, vì vậy nó là một người tiêu dùng.
Tôi đoán có lẽ tôi không hoàn toàn hiểu được nguyên tắc get/put sau đó ... ??? –
Tôi khuyên bạn nên đọc chương Java hiệu quả thảo luận về "PECS", sau đó. Và suy nghĩ về nó theo cách này: nếu tôi yêu cầu bạn sắp xếp một danh sách của đôi, và đã cho bạn một Comparator để làm điều đó với, làm thế nào bạn sẽ cảm thấy về điều đó? –
Bạn có thể mở rộng câu trả lời của mình không? Trong khi câu trả lời có thể rõ ràng đối với các lập trình viên java nâng cao, nó đòi hỏi phải đọc lại câu hỏi để hiểu đầy đủ những gì bạn đang nói. Tôi biết đây có thể là một trong các câu trả lời trước của bạn, nhưng nó xuất hiện ở phần Đánh giá bài đăng có chất lượng thấp. - [Từ đánh giá] (https://stackoverflow.com/review/low-quality-posts/11445740) – Ferrybig