Trong phần khái quát về Java hiệu quả của Bloch (trong đó có chương "miễn phí" dành cho tất cả: http://java.sun.com/docs/books/effective/generics.pdf ), ông nói:
Nếu một tham số loại chỉ xuất hiện một lần trong khai báo phương thức, thay thế nó bằng ký tự đại diện.
(Xem trang 31-33 của pdf đó)
Chữ ký trong câu hỏi là:
public static void swap(List<?> list, int i, int j)
đấu với
public static void swap(List<E> list, int i, int j)
Và sau đó tiến hành sử dụng chức năng "người trợ giúp" riêng tư tĩnh với tham số loại thực tế để thực hiện công việc. Chữ ký của hàm trợ giúp là CHÍNH XÁC của tùy chọn thứ hai.
Tại sao ký tự đại diện lại thích hợp hơn, vì bạn cần KHÔNG sử dụng ký tự đại diện để hoàn thành công việc? Tôi hiểu rằng trong trường hợp này vì anh ta sửa đổi Danh sách và bạn không thể thêm vào bộ sưu tập với ký tự đại diện không giới hạn, vậy tại sao lại sử dụng nó?